HashSet和TreeSet的区别 HashSet和TreeSet的用法

HashSet\u548cTreeSet\u6709\u4ec0\u4e48\u533a\u522b\uff1f

HashSet\u662f\u7531\u4e00\u4e2ahash\u8868\u6765\u5b9e\u73b0\u7684\uff0c\u56e0\u6b64\uff0c\u5b83\u7684\u5143\u7d20\u662f\u65e0\u5e8f\u7684\u3002add()\uff0cremove()\uff0ccontains()\u65b9\u6cd5\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u662fO(1)\u3002

\u53e6\u4e00\u65b9\u9762\uff0cTreeSet\u662f\u7531\u4e00\u4e2a\u6811\u5f62\u7684\u7ed3\u6784\u6765\u5b9e\u73b0\u7684\uff0c\u5b83\u91cc\u9762\u7684\u5143\u7d20\u662f\u6709\u5e8f\u7684\u3002\u56e0\u6b64\uff0cadd()\uff0cremove()\uff0ccontains()\u65b9\u6cd5\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u662fO(logn)\u3002

==========================\u4ed6\u4eec\u7684\u533a\u522b===========================
1. HashSet\u662f\u901a\u8fc7HashMap\u5b9e\u73b0\u7684,TreeSet\u662f\u901a\u8fc7TreeMap\u5b9e\u73b0\u7684,\u53ea\u4e0d\u8fc7Set\u7528\u7684\u53ea\u662fMap\u7684key
2. Map\u7684key\u548cSet\u90fd\u6709\u4e00\u4e2a\u5171\u540c\u7684\u7279\u6027\u5c31\u662f\u96c6\u5408\u7684\u552f\u4e00\u6027.TreeMap\u66f4\u662f\u591a\u4e86\u4e00\u4e2a\u6392\u5e8f\u7684\u529f\u80fd.
3. hashCode\u548cequal()\u662fHashMap\u7528\u7684, \u56e0\u4e3a\u65e0\u9700\u6392\u5e8f\u6240\u4ee5\u53ea\u9700\u8981\u5173\u6ce8\u5b9a\u4f4d\u548c\u552f\u4e00\u6027\u5373\u53ef.
a. hashCode\u662f\u7528\u6765\u8ba1\u7b97hash\u503c\u7684,hash\u503c\u662f\u7528\u6765\u786e\u5b9ahash\u8868\u7d22\u5f15\u7684.
b. hash\u8868\u4e2d\u7684\u4e00\u4e2a\u7d22\u5f15\u5904\u5b58\u653e\u7684\u662f\u4e00\u5f20\u94fe\u8868, \u6240\u4ee5\u8fd8\u8981\u901a\u8fc7equal\u65b9\u6cd5\u5faa\u73af\u6bd4\u8f83\u94fe\u4e0a\u7684\u6bcf\u4e00\u4e2a\u5bf9\u8c61
\u624d\u53ef\u4ee5\u771f\u6b63\u5b9a\u4f4d\u5230\u952e\u503c\u5bf9\u5e94\u7684Entry.
c. put\u65f6,\u5982\u679chash\u8868\u4e2d\u6ca1\u5b9a\u4f4d\u5230,\u5c31\u5728\u94fe\u8868\u524d\u52a0\u4e00\u4e2aEntry,\u5982\u679c\u5b9a\u4f4d\u5230\u4e86,\u5219\u66f4\u6362Entry\u4e2d\u7684value,\u5e76\u8fd4\u56de\u65e7value
4. \u7531\u4e8eTreeMap\u9700\u8981\u6392\u5e8f,\u6240\u4ee5\u9700\u8981\u4e00\u4e2aComparator\u4e3a\u952e\u503c\u8fdb\u884c\u5927\u5c0f\u6bd4\u8f83.\u5f53\u7136\u4e5f\u662f\u7528Comparator\u5b9a\u4f4d\u7684.
a. Comparator\u53ef\u4ee5\u5728\u521b\u5efaTreeMap\u65f6\u6307\u5b9a
b. \u5982\u679c\u521b\u5efa\u65f6\u6ca1\u6709\u786e\u5b9a,\u90a3\u4e48\u5c31\u4f1a\u4f7f\u7528key.compareTo()\u65b9\u6cd5,\u8fd9\u5c31\u8981\u6c42key\u5fc5\u987b\u5b9e\u73b0Comparable\u63a5\u53e3.
c. TreeMap\u662f\u4f7f\u7528Tree\u6570\u636e\u7ed3\u6784\u5b9e\u73b0\u7684,\u6240\u4ee5\u4f7f\u7528compare\u63a5\u53e3\u5c31\u53ef\u4ee5\u5b8c\u6210\u5b9a\u4f4d\u4e86.


=====================================\u4ed6\u4eec\u7684\u7528\u6cd5======================

HashSet\u7684\u4f7f\u7528
import java.util.HashSet;
import java.util.Iterator;
public class WpsklHashSet
{
//java \u4e2dSet\u7684\u4f7f\u7528(\u4e0d\u5141\u8bb8\u6709\u91cd\u590d\u7684\u5bf9\u8c61):
public static void main(String[] args)
{
HashSet hashSet=new HashSet();
String a=new String("A");
String b=new String("B");
String c=new String("B");
hashSet.add(a);
hashSet.add(b);
System.out.println(hashSet.size());
String cz=hashSet.add(c)?"\u6b64\u5bf9\u8c61\u4e0d\u5b58\u5728":"\u5df2\u7ecf\u5b58\u5728";
System.out.println("\u6d4b\u8bd5\u662f\u5426\u53ef\u4ee5\u6dfb\u52a0\u5bf9\u8c61 "+cz);
System.out.println(hashSet.isEmpty());
//\u6d4b\u8bd5\u5176\u4e2d\u662f\u5426\u5df2\u7ecf\u5305\u542b\u67d0\u4e2a\u5bf9\u8c61
System.out.println(hashSet.contains("A"));
Iterator ir=hashSet.iterator();
while(ir.hasNext())
{
System.out.println(ir.next());
}
//\u6d4b\u8bd5\u67d0\u4e2a\u5bf9\u8c61\u662f\u5426\u53ef\u4ee5\u5220\u9664
System.out.println(hashSet.remove("a"));
System.out.println(hashSet.remove("A"));
//\u7ecf\u8fc7\u6d4b\u8bd5,\u5982\u679c\u4f60\u60f3\u518d\u6b21\u4f7f\u7528ir\u53d8\u91cf,\u5fc5\u987b\u91cd\u65b0\u66f4\u65b0\u4ee5\u4e0b
ir=hashSet.iterator();
while(ir.hasNext())
{
System.out.println(ir.next());
}

}
}
/**
* \u901a\u8fc7\u8fd9\u4e2a\u7a0b\u5e8f\uff0c\u8fd8\u53ef\u4ee5\u6d4b\u8bd5\u6811\u96c6\u7684\u6dfb\u52a0\u5143\u7d20\u7684\u65e0\u5e8f\u6027\u4e0e\u8f93\u51fa\u7684\u6709\u5e8f\u6027
*/

import java.util.TreeSet;
import java.util.Iterator;

public class TreeSetTest
{
public static void main(String[] args)
{
TreeSet tree = new TreeSet();
tree.add("China");
tree.add("America");
tree.add("Japan");
tree.add("Chinese");

Iterator iter = tree.iterator();
while(iter.hasNext())
{
System.out.println(iter.next());
}
}
}
\u4ee5\u4e0a\u5c31\u662f\u4ed6\u4eec\u7684\u533a\u522b\u548c\u7528\u6cd5\uff0c\u91cd\u5728\u7406\u89e3\uff0c\u591a\u7528\uff0c\u795d\u4f60\u6210\u529f
\u6253\u5b57\u4e0d\u6613\uff0c\u5982\u6ee1\u610f\uff0c\u671b\u91c7\u7eb3\u3002

两者主要在实现方式、数据是否有序以及是否可以放入null值等三方面存在区别。

一、实现方式

HashSet:HashSet是哈希表实现的。

TreeSet:TreeSet是二差树实现的。

二、数据是否有序

HashSet:HashSet中的数据是无序的。

TreeSet:Treeset中的数据是自动排好序的。

三、是否可以放入null值

HashSet:可以放入null,但只能放入一个null。 

TreeSet:不允许放入null值。

扩展资料

HashSet是基于HashMap实现的,HashSet底层使用HashMap来保存所有元素,因此HashSet的实现比较简单,相关HashSet的操作,基本上都是直接调用底层HashMap的相关方法来完成,应该为保存到HashSet中的对象覆盖hashCode()和equals()。

1、已知实现接口有:

Serializable, Cloneable, Iterable<E>, Collection<E>, Set<E>。

2、直接已知子类:

JobStateReasons, LinkedHashSet。

参考资料来源:百度百科-HashSet






==========================他们的区别===========================
1. HashSet是通过HashMap实现的,TreeSet是通过TreeMap实现的,只不过Set用的只是Map的key
2. Map的key和Set都有一个共同的特性就是集合的唯一性.TreeMap更是多了一个排序的功能.
3. hashCode和equal()是HashMap用的, 因为无需排序所以只需要关注定位和唯一性即可.
a. hashCode是用来计算hash值的,hash值是用来确定hash表索引的.
b. hash表中的一个索引处存放的是一张链表, 所以还要通过equal方法循环比较链上的每一个对象
才可以真正定位到键值对应的Entry.
c. put时,如果hash表中没定位到,就在链表前加一个Entry,如果定位到了,则更换Entry中的value,并返回旧value
4. 由于TreeMap需要排序,所以需要一个Comparator为键值进行大小比较.当然也是用Comparator定位的.
a. Comparator可以在创建TreeMap时指定
b. 如果创建时没有确定,那么就会使用key.compareTo()方法,这就要求key必须实现Comparable接口.
c. TreeMap是使用Tree数据结构实现的,所以使用compare接口就可以完成定位了.

=====================================他们的用法======================

HashSet的使用
import java.util.HashSet;
import java.util.Iterator;
public class WpsklHashSet
{
//java 中Set的使用(不允许有重复的对象):
public static void main(String[] args)
{
HashSet hashSet=new HashSet();
String a=new String("A");
String b=new String("B");
String c=new String("B");
hashSet.add(a);
hashSet.add(b);
System.out.println(hashSet.size());
String cz=hashSet.add(c)?"此对象不存在":"已经存在";
System.out.println("测试是否可以添加对象 "+cz);
System.out.println(hashSet.isEmpty());
//测试其中是否已经包含某个对象
System.out.println(hashSet.contains("A"));
Iterator ir=hashSet.iterator();
while(ir.hasNext())
{
System.out.println(ir.next());
}
//测试某个对象是否可以删除
System.out.println(hashSet.remove("a"));
System.out.println(hashSet.remove("A"));
//经过测试,如果你想再次使用ir变量,必须重新更新以下
ir=hashSet.iterator();
while(ir.hasNext())
{
System.out.println(ir.next());
}

}
}
/**
* 通过这个程序,还可以测试树集的添加元素的无序性与输出的有序性
*/

import java.util.TreeSet;
import java.util.Iterator;

public class TreeSetTest
{
public static void main(String[] args)
{
TreeSet tree = new TreeSet();
tree.add("China");
tree.add("America");
tree.add("Japan");
tree.add("Chinese");

Iterator iter = tree.iterator();
while(iter.hasNext())
{
System.out.println(iter.next());
}
}
}
以上就是他们的区别和用法,重在理解,多用,祝你成功

1、TreeSet 是二差树实现的,Treeset中的数据是自动排好序的,不允许放入null值

2、HashSet 是哈希表实现的,HashSet中的数据是无序的,可以放入null,但只能放入一个null,两者中的值都不能重复,就如数据库中唯一约束

3、HashSet要求放入的对象必须实现HashCode()方法,放入的对象,是以hashcode码作为标识的,而具有相同内容的String对象,hashcode是一样,所以放入的内容不能重复。但是同一个类的对象可以放入不同的实例

视频讲解的是Java面向对象编程语言中关于集合框架的知识,重点讲解了TreeSet和HashSet的区别,前者是有序的,后者是无序的。前者是通过比较规则返回的结果是否为0来去判断是否是同一个元素,后者则不是。



HashSet无序
TreeSet有序
二者里边不能有重复的对象

  • Set闆嗗悎,鏀剧殑鍏冪礌涓嶈兘閲嶅,璇烽棶瀹冪殑鍒ゆ柇閲嶄笉閲嶅鏄庝箞瀹炵幇鐨?_鐧惧害...
    绛旓細娉細濡傛灉娌℃湁瑕嗙洊hashCode()鏂规硶锛岄偅灏辨槸鍙瘮杈僥quals().瀵逛袱涓璞quals杩愮畻锛屾槸鍒ゆ柇涓や釜瀵硅薄鏄惁鐩哥瓑鐨勫叧閿傜涓変釜闂锛2锛HashSet涓嶵reeSet鍖哄埆:1銆乀reeSet 鏄簩宸爲瀹炵幇鐨,Treeset涓殑鏁版嵁鏄嚜鍔ㄦ帓濂藉簭鐨勶紝涓嶅厑璁告斁鍏ull鍊 2銆丠ashSet 鏄搱甯岃〃瀹炵幇鐨,HashSet涓殑鏁版嵁鏄棤搴忕殑锛屽彲浠ユ斁鍏...
  • treeset搴曞眰鏁版嵁缁撴瀯鏄粈涔?濡備綍淇濊瘉鍏冪礌鐨勫敮涓鎬х殑鍛
    绛旓細Set:鍏冪礌鏄棤搴忕殑,鍏冪礌涓嶅彲浠ラ噸澶 HashSetTreeSet Map:<k,v>Hashtable:鏁堢巼浣,涓嶅厑璁哥┖鍊,绾跨▼鍚屾,jdk1.1,鏁版嵁缁撴瀯:鍝堝笇琛ㄦ暟鎹粨鏋凥ashMap:鏁堢巼楂,鍏佽绌哄,绾跨▼涓嶅悓姝,jdk1.2 鏁版嵁缁撴瀯:鍝堝笇琛ㄦ暟鎹粨鏋凾reeMap:鏁版嵁缁撴瀯:浜屽弶鏍,绾跨▼涓嶅悓姝,鍙互缁檓ap闆嗗悎涓殑鍏冪礌鎺掑垪 ArrayList:鏁版嵁缁撴瀯鏄暟缁 鏄...
  • TreeSet涓轰粈涔堣兘鎺掑簭
    绛旓細treeSet.add(new String("aaa"));treeSet.add(new String("bbb"));treeSet.add(new String("ccc"));treeSet.add(new String("aaa"));System.out.println(treeSet);缁撴灉杈撳嚭涓猴細[aaa, bbb, ccc]杩欐椂锛宼reeSet.size()=3銆傝屼笖锛屽畠鏄粡杩囨帓搴忕殑杈撳嚭銆傚鏋滄湁澶氫釜绫荤殑瀵硅薄閮藉姞鍏ュ埌TreeSet闆...
  • java 鎬庝箞缁set璧嬪
    绛旓細TreeSet鍜孒ashSet闆嗗悎涓殑瀵硅薄濡傛灉鏄彲鍙樺璞★紝瀵硅薄灞炴ф敼鍙樻椂锛屼細瀵艰嚧闆嗗悎澶勭悊 瀵硅薄澶嶆潅鍖栵紝鏄撳嚭閿欍傛墍浠ュ簲璇ュ敖閲忓湪闆嗗悎涓坊鍔犱笉鍙彉瀵硅薄 涓嶅彲鍙樺璞℃槸 1.灞炴т负private final 2.鍚湁甯﹀弬鏁版瀯閫犲櫒锛屼负瀵硅薄鍒濆鍖 3.灞炴ф湁get鏂规硶娌℃湁set鏂规硶 瀹氬埗鎺掑簭锛歍reeSet鐨勮嚜鐒舵帓搴忔槸鏍规嵁闆嗗悎鍏冪礌澶у皬锛孴reeSet灏嗗畠浠...
  • java涓庝箞寰闆嗗悎绫set閲屾坊鍔犳暟鎹??
    绛旓細鎵╁睍鐭ヨ瘑 Set闆嗗悎鍙互鐭ラ亾鏌愮墿鏄惁宸茶繎瀛樺湪浜庨泦鍚堜腑,涓嶄細瀛樺偍閲嶅鐨勫厓绱狅紝娉ㄩ噸鐙竴鏃犱簩鐨勬ц川锛岀敤浜庡瓨鍌ㄦ棤搴(瀛樺叆鍜屽彇鍑虹殑椤哄簭涓嶄竴瀹氱浉鍚)鍏冪礌锛屽间笉鑳介噸澶嶃傚彲浠ュ緢濂藉湴浣滀负鎺掗噸鏃朵娇鐢ㄧ殑鏁版嵁缁撴瀯锛屼絾瑕佹敞鎰忛泦鍚堝唴閮ㄦ暟鎹竴鑸儏鍐垫病鏈夐『搴忋傚父鐢ㄧ殑set鏈HashSet鍜孴reeSet銆俆reeSet鏄疛AVA涓泦鍚堢殑涓绉嶏紝Tree...
  • java涓湪鑷畾涔夌被鏃 涓轰粈涔TreeSet涓嶉渶瑕佽鍐檈quals鍜孒ashCode鏂规硶
    绛旓細java涓泦鍚堟鏋跺簳灞傛暟鎹粨鏋勫涓 ArrayList:鏁扮粍 linkedlist:閾捐〃 TreeSet:浜屽弶鏍 HashSet:鍝堝笇琛 鍧囧叿澶囨瘮杈冩э紝浠ユ瘮杈冨櫒涓烘瘮鍊 鐢卞悕鐭ユ剰锛屽嚒鏄疶ree 搴曞眰鏁版嵁缁撴瀯鍧囦负浜屽弶鏍戯紝鑰TreeSet闆嗗悎 鍙渶瀹炵幇Comparable鍊熷彛涓殑compareTo鏂规硶 鑰屽彧鏈夊簳灞傛暟鎹粨鏋勪负鍝堝笇琛ㄦ椂鎵嶄細閲嶅啓equals鍜孒ashCode鏂规硶 ...
  • List 銆Set銆 Map鏈変粈涔堝尯鍒拰鑱旂郴
    绛旓細鍓嶉潰璇寸殑Iterator鍙兘瀵瑰鍣ㄨ繘琛屽悜鍓嶉亶鍘嗭紝鑰孡istIterator鍒欑户鎵夸簡Iterator鐨勬濇兂锛屽苟鎻愪緵浜嗗List杩涜鍙屽悜閬嶅巻鐨勬柟娉曘 2銆丼et鎺ュ彛涔熸槸Collection鐨勪竴绉嶆墿灞曪紝鑰屼笌List涓嶅悓鐨勬椂锛屽湪Set涓殑瀵硅薄鍏冪礌涓嶈兘閲嶅锛屼篃灏辨槸璇翠綘涓嶈兘鎶婂悓鏍风殑涓滆タ涓ゆ鏀惧叆鍚屼竴涓猄et瀹瑰櫒涓傚畠鐨勫父鐢ㄥ叿浣撳疄鐜版湁HashSet鍜孴reeSet绫汇侶a...
  • java闆嗗悎鍒嗕负鍝嚑澶х被
    绛旓細2. **List**锛氬垪琛紙List锛夋槸涓绉嶇壒娈婄殑闆嗗悎锛屽畠鎸夐『搴忓瓨鍌ㄥ厓绱狅紝骞舵彁渚涗簡涓绉嶆柟渚跨殑鏂瑰紡鏉ヨ闂拰淇敼鍏冪礌鐨勭壒瀹氫綅缃3. **Set**锛氶泦鍚堬紙Set锛夋槸涓涓棤搴忕殑闆嗗悎锛屽叾涓厓绱犱笉鍏佽閲嶅銆傚父瑙佺殑Set瀹炵幇鍖呮嫭HashSet鍜孴reeSet銆4. **Queue**锛氶槦鍒楋紙Queue锛夋槸涓绉嶇壒娈婄殑闆嗗悎锛屽畠閬靛惊鍏堣繘鍏堝嚭锛團IFO...
  • Java涓Set銆丩ist銆丮ap闆嗗悎绫(鎺ュ彛)鐨勭壒鐐瑰強鍖哄埆銆傚垎鍒湁鍝簺甯哥敤瀹炵幇...
    绛旓細Set锛氭绱㈠厓绱犳晥鐜囦綆涓嬶紝鍒犻櫎鍜屾彃鍏ユ晥鐜囬珮锛屾彃鍏ュ拰鍒犻櫎涓嶄細寮曡捣鍏冪礌浣嶇疆鏀瑰彉锛汱ist锛氬拰鏁扮粍绫讳技锛孡ist鍙互鍔ㄦ佸闀匡紝鏌ユ壘鍏冪礌鏁堢巼楂橈紝鎻掑叆鍒犻櫎鍏冪礌鏁堢巼浣庯紝鍥犱负浼氬紩璧峰叾浠栧厓绱犱綅缃敼鍙橈紱Map锛氶傚悎鍌ㄥ瓨閿煎鐨勬暟鎹侸ava鏄竴闂ㄩ潰鍚戝璞$紪绋嬭瑷锛屼笉浠呭惛鏀朵簡C++璇█鐨勫悇绉嶄紭鐐癸紝杩樻憭寮冧簡C++閲岄毦浠ョ悊瑙g殑澶氱户鎵裤...
  • Java涓璍ist銆Set銆丮ap鎺ュ彛涔嬮棿鐨勫尯鍒拰鑱旂郴
    绛旓細Set鎺ュ彛涔熸槸Collection鐨勪竴绉嶆墿灞,鑰屼笌List涓嶅悓鐨勬椂,鍦⊿et涓殑瀵硅薄鍏冪礌涓嶈兘閲嶅,涔熷氨鏄浣犱笉鑳芥妸鍚屾牱鐨勪笢瑗夸袱娆℃斁鍏ュ悓涓涓猄et瀹瑰櫒涓傚畠鐨勫父鐢ㄥ叿浣撳疄鐜版湁HashSet鍜孴reeSet绫汇侶ashSet鑳藉揩閫熷畾浣嶄竴涓厓绱,浣嗘槸浣犳斁鍒癏ashSet涓殑瀵硅薄闇瑕佸疄鐜癶ashCode()鏂规硶,瀹冧娇鐢ㄤ簡鍓嶉潰璇磋繃鐨勫搱甯岀爜鐨勭畻娉曘傝孴reeSet鍒欏皢鏀惧叆鍏朵腑...
  • 扩展阅读:tm7711高精度adc ... seahorseplanet.com ... www.sony.com.cn ... 按了reset后怎么恢复wifi ... paperpass免费入口 ... hashset继承自abstractset ... hasee电脑多少钱一台 ... java hashset ... hasee战神笔记本电脑 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网