集合

来源:互联网 发布:vasp软件安装 编辑:程序博客网 时间:2024/05/17 09:33

  学习集合的时候感觉乱七八糟的,今天趁着复习的时间好好总结一番,如有不如意的地方请指出,鄙人将感激不尽。

 首先可以根据集合框架图来理顺这章的内容。


 上图只是为了很好地说明问题,并不是完整的Collection集合图,如EnumSet 、AbstractQueue等都没在图中表示出来。

  1.set集

   在java语言中,java.util.set与数学上的set集合的意义一致,都是不允许有重复的元素出现。set接口只有从Collection继承下来的方法,并没有添加自己的新方法。注意这儿并不代表它的实现类没有添加新的方法。

   A. 散列集 HashSet

   HashSet是无序集,它的顺序是不定的。

   当向其中添加元素时,先调用元素对象的hashCode()方法计算它的散列码,若散列码指向的位置为空,则可以加进去,反之则需要调用equals()方法判断两个对象是否相同,若相同,则不允许加入,反之能加入进去。

  

public class Collection {public static void main(String[] args){String str[]={"we","are","a","student","hello","a"};HashSet<String> set=new HashSet<>();for(String s:str)//给set添加元素{set.add(s);}System.out.println("第一次输出");for(Iterator<String> it=set.iterator();it.hasNext();)//迭代器{System.out.println(it.next());}//添加一个相同的字符串的情形String  ss="a";set.add(ss);System.out.println("第二次输出");for(Iterator<String> it=set.iterator();it.hasNext();)//迭代器{System.out.println(it.next());}}}
输出的结果:

第一次输出
hello
are
student
a
we
第二次输出
hello
are
student
a
we

  B.TreeSet

  TreeSet属于有序集,默认情况下是从小到大的顺序排列。同时也允许我们将自定义的Comparator对象传递给TreeSet构造器告诉TreeSet使用所提供的这种方式排序。

  代码说明:

public class Collection {public static void main(String[] args){TreeSet<Person> sorttreeset=new TreeSet<>(new Comparator<Person>(){ public int compare(Person a,Person b)     {   return a.getAge()-b.getAge();      }});sorttreeset.add(new  Person("张山",21));sorttreeset.add(new  Person("丽丽",20));sorttreeset.add(new  Person("海尒",17));sorttreeset.add(new  Person("杰克",24));sorttreeset.add(new  Person("魔姬",21));//按自己定义的方式排序System.out.println("输出sorttreeset");for(Iterator<Person>it=sorttreeset.iterator();it.hasNext();){System.out.println(it.next());}}}
 运行结果:


输出sorttreeset
Person [name=海尒, age=17]
Person [name=丽丽, age=20]
Person [name=张山, age=21]
Person [name=杰克, age=24]

  由运行结果可以看出,出现重复元素时,会把多余的元素删除;

 若存储的是自定义的类时,一定要定义它的比较器。否则会报错。

C.LinkedHashSet

  数据结构是一种双链表,且是有序集,但是它的有序与TreeSet的有序稍微有点差别,它的有序是指按插入的顺序排列。LinkedHashSet中的方法只是继承了HashSet和Set中的方法。

 代码:

public class Collection {public static void main(String[] args){LinkedHashSet<String>  linkedhashset=new LinkedHashSet<>();String str[]={"hello","welcome","to","nanchang"};for(String s:str){linkedhashset.add(s);}for(Iterator<String>it=linkedhashset.iterator();it.hasNext();){System.out.println(it.next());}
}
运行结果:

hello
welcome
to
nanchang

2.List接口

 java.util.List<E>是列表,它表示的是有序列表(插入顺序)。允许包含重复的元素,也允许包含null元素。除了继承Collection的方法外,还增添了自己特有的方法,常用的有subList(),ListIterator<E> listIterator(),indexOf(Object o)等。

 A.ArrayList

 ArrayList是属于动态数组,它的存储大小不固定,可以储存null元素。

代码:

public class Collection {public static void main(String[] args){ArrayList<String>  arraylist=new ArrayList<>();String str1[]={"hello","welcome","to","nanchang","nanchang",null};for(String s:str1){ arraylist.add(s);}for(Iterator<String>it= arraylist.iterator();it.hasNext();){System.out.println(it.next());}}}
运行结果:

hello
welcome
to
nanchang
nanchang
null


B.LinkedList

LinkedList的数据结构是双向链表,它与ArrayList的优缺点可以很快就知道。操作与ArrayList类似。只不过是有属于自己的一些方法而已。如previous()。


。。。。队列后续补充

0 0
原创粉丝点击