java--集合框架(List,Set,Map)——Set
2019-05-05 21:17
579 查看
/** * HashSet存储数据的特点: * 1.底层是以哈希表(数组+链表/红黑树)的方式进行存储数据 * 2.是一个无序的容器(你怎么存进去的 不一定怎么取出来) * 3.不能存储相同元素 * 4.因为没有下标,所以不能使用普通for循环进行遍历 */
Set<Integer> s = new HashSet<Integer>(); s.add(1); s.add(2); s.add(3); s.add(4); s.add(6); s.add(9); s.add(1); //遍历Set集合可以使用迭代器进行遍历 //1.把Set集合转换为迭代器 Iterator<Integer> iter = s.iterator(); //2.通过while循环遍历迭代器 //iter.hasNext()判断是否有下一个元素 //iter.next();取出当前元素 while(iter.hasNext()){ System.out.println(iter.next()); } Set<String> s2 = new HashSet<String>(); s2.add("a"); s2.add("b"); s2.add("c"); s2.add("d"); s2.add("e"); s2.add("a"); Iterator<String> iter2 =s2.iterator(); while(iter2.hasNext()){ System.out.println(iter2.next()); } //Java的任何对象 都对应一个hashcode值(系统为我们随机生成的一个十进制整数逻辑值 不是真正的地址) String s3 = "abc"; int i = s.hashCode(); System.out.println(i); Set<String> str = new HashSet<String>(); String ss1 = "abc"; String ss2 = "重地"; String ss3 = "通话"; String ss4 = "abc"; str.add(ss1); //96354 str.add(ss2); //1179395 str.add(ss3); //1179395 str.add(ss4); //96354 System.out.println(ss1.hashCode()); System.out.println(ss2.hashCode()); System.out.println(ss3.hashCode()); System.out.println(ss4.hashCode()); //当调用set集合中的add方法时,会调用hashcode方法和equals方法 //1.首先获取当前元素的哈希值,判断当前的哈希值是否在set集合中 //2.当前添加元素的值和已经存在哈希值对应的元素进行equals比较 //3.如果当前元素的哈希值和内容值都相等,就不把当前元素添加到对应的链表中了
1、HashSet与TreeSet接口的一点不同,HashSet 保存的数据是无序的,TreeSet保存的数据是有序的,所以如果要想保存的数据有序应该使用TreeSet子类。
2、利用TreeSet保存自定义类对象的时候,自定义所在的类一定要实现Comparable接口,如果没有实现这个接口那么就无法区分大小关系,而且在TreeSet中如果要进行排序,那么就要将所有的字段都进行比较,就是说在TreeSet中是依靠comparato()方法返回的是不是0来判断是不是重复元素的。
3、如果是HashSet子类,那么其判断重复数据的方式不是依靠的comparable接口而是Object类之中的两个方法:
(1)取得对象的哈希码 hashCode();
(2)对象比较:equals(); 这俩个方法均不需要自己编写,在eclipse里面可以使用右键source 选择自动生成。就像生成Getter 和Setter 方法一样。
总结:TreeSet 依靠的是Comparable 来区分重复数据;
HashSet 依靠的是hashCode()、equals()来区分重复数据
Set 里面不允许保存重复数据
相关文章推荐
- java的集合框架:set,list与map
- Java_List Set Map_集合框架 泛型
- java 集合框架 Collection(List,Set) 与 Map 小结
- java--集合框架(List,Set,Map)——Map
- 黑马程序员_java_集合框架_Collection_List_Set_Map_泛型
- java 集合框架 Set Map List
- java中的集合框架Set 、List 、Map
- java基础集合框架——List、Set、Map概述(java集合一)
- Java—集合框架 List和Set的contains()以及Map的containsKey()、containsValue()
- Java基础知识强化之集合框架笔记67:Map集合面试题之List,Set,Map等接口是否继承自Map接口
- java基础——集合框架(List、Set、Map)
- JAVA基础学习之 Map集合、集合框架工具类Collections,Arrays、可变参数、List和Set集合框架什么时候使用等(4)
- java基础集合框架——List、Set、Map概述(java集合一)
- map,set,list,等JAVA中集合解析(了解)
- Java list-set-map集合
- Java 中的集合接口——List、Set、Map
- 集合框架中的list、set和map的浅析
- java基础之集合(Set,Map,List)总结
- Java学习第14天:集合框架零接触和基本理解(List和Set)
- Java中 set,list,array(集合与数组)、Map相互转换