1)类集:一个动态的对象数组,是对一些实现好的数据结构进行了包装。
类集框架的特性:高性能,对基本类集(动态数组、链接表、树和散列表)的实现是高效率的,所以一般很少需要人工去对这些“数据引擎”编写代码;
框架必须允许不同类型的类集以相同的方式和高度互操作方式工作(对于任何对象所有的操作形式都是一样的,例如想向集合中增加元素,则一定是使
用add()方法,另外类集中的元素类型都是统一的,即一个集合中要么全是A类对象,要么全是B类对象);
类集必须是容易扩展和修改的,为了实现这一目标,类集框架被设计成包含了一组标准的接口。
2)在使用各个类集接口时,如果没有指定泛型,则肯定会出现警告信息,
此时,泛型将被擦除而全部使用Object接收。
3)类集框架本身不受对象数组长度的限制。
4)Collection接口
此接口使用了泛型,可以保证类集操作的安全性,避免发生ClassCastException。
Collection接口是单值存放的最大父接口。
5)在开发中,很少直接使用Collectioin接口进行开发,基本上都是使用其子类接口。
子类接口主要有
List:可以存放重复的内容
Set:不能存放重复的内容,所有重复内容靠hashCode()和equals()两个方法区分
Queue:队列接口
SortedSet:可以对集合中的数据进行排序
6)集合的标准输出:
迭代输出:Iterator接口
只要用到集合的输出操作,就一定使用Iterator接口。
使用Iterator迭代器可以用来查找、删除指定的元素。
7)Collection、Set、List接口都属于单值的操作,即每次只能操作一个对象,
而Map接口每次可以操作一对对象,即二元偶对象,Map中的每个元素都使用key value
的形势存储在集合中。
8)Collections集合工具类
通过此类可以方便地操作集合,如替换、检索、排序等操作。
9)
1 packagecn.itcast.arraylist.demo;2
3 importjava.util.ArrayList;4 importjava.util.Collection;5 importjava.util.List;6
7 public classArrayListDemo {8
9 public static voidmain(String[] args) {10 List allList = null;//定义List对象
11 Collection allCollection = null;//定义Collection对象
12 allList = new ArrayList();//实例化List对象,只能是String类型
13 allCollection = new ArrayList();///实例化Collection对象
14 allList.add("Hello");//从Collection继承的方法
15 allList.add("Hello");//List可以存放重复的内容
16 allList.add(0,"Worldl");//List扩充的方法
17 System.out.println(allList);//输出:[World,Hello]//18 allCollection.add("Lxh");
19 allCollection.add("wwww");
20 System.out.println(allCollection);
21 allList.addAll(allCollection);//增加一组对象
22 allList.addAll(0, allCollection);
23 System.out.println(allList);
24 }25 }
注:ArrayList是List的子类,直接通过对象的多态性为List实例化
List是Collection的子类,通过对象的多态性有ArrayList实例化。
顺序:Collection(接口)
List(接口)
ArrayList(子类)
注意:集合不是数组:
10)
1 importjava.util.ArrayList;2 importjava.util.List;3
4 public classArrayListDemo03 {5
6 public static voidmain(String[] args) {7 List allList = null;8 allList = newArrayList();9 allList.add("Hello");10 allList.add("wwww");11 System.out.println(allList.size());//输出结果:2
12 System.out.println(allList.get(0));//输出:Hello
13 for(int i=0;i
17 System.out.println("数组输出");18 for(int j=0;j
23 }
11)
Set接口是Collection的子类,没有对Collection进行扩充,但是要求更严格,不能存放重复内容;当存入重复内容时,重复元素只增加一次。
Set接口的实例无法像List接口那样进行双向输出,因为此接口没有提供像List那样的get(int index)方法。
顺序:
Collection(接口)
Set(接口)
SortedSet(接口)、HashSet(子类)、TreeSet(子类)
HashSet里面不能存放重复元素,而且采用散列的存储方式,所以没有顺序,即输出是随机顺序。
12)
1 importjava.util.HashSet;2 importjava.util.Set;3
4 public classHashSetDemo01 {5
6 public static voidmain(String[] args) {7 Set allSet = new HashSet();8 allSet.add("D");9 allSet.add("B");10 allSet.add("C");11 allSet.add("C");12 allSet.add("C");13 allSet.add("A");14 allSet.add("E");15 System.out.print(allSet);16 }17
18 }
13)但是,当HashSet中存放自定义的类,每个对象所在的类必须覆写Object类的hashCode()、equals()、toString() 3个方法。覆写这三个方法之后,才能实现无重复存放。
package cn.itcast.comparable.demo01;
14)
1 importjava.util.HashSet;2 importjava.util.Set;3
4 classPerson {5 privateString name;6 private intage;7 public Person(String name,intage){8 this.name =name;9 this.age =age;10 }11 public booleanequals(Object obj){12 if(this==obj){13 return true;14 }15 if(!(obj instanceofPerson)){16 return false;17 }18 Person p =(Person)obj;19 if(this.name.equals(p.name)&&this.age==p.age){20 return true;21 }else{22 return false;23 }24 }25 public inthashCode(){26 return this.name.hashCode() * this.age;27 }28 publicString toString(){29 return "姓名"+this.name+":年龄"+this.age;30 }31 }32
33 public classRepeatHashSet {34
35 public static voidmain(String[] args){36 Set allSet = new HashSet();37 allSet.add(new Person("张三",20));38 allSet.add(new Person("李四",22));39 allSet.add(new Person("王五",20));40 allSet.add(new Person("赵六",20));41 allSet.add(new Person("孙七",22));42 allSet.add(new Person("王五",20));43 System.out.println(allSet);44
45 }46 }
15)TreeSet类:对输入的数据进行有序排列,即在集合中插入数据时时没有顺序的,但是输出之后数据是有序的,所有TreeSet是排序的子类。
16)
1 importjava.util.Set;2 importjava.util.TreeSet;3
4 public classTreeSetDemo01 {5
6 public static voidmain(String[] args) {7 Set allSet = new TreeSet();8 allSet.add("C");9 allSet.add("C");10 allSet.add("C");11 allSet.add("D");12 allSet.add("A");13 allSet.add("D");14 allSet.add("B");15 allSet.add("E");16 allSet.add("A");17 System.out.print(allSet);//输出结构:ABCDE
18 }19 }
17)如果要将自定义的类存入TreeSet中,TreeSet中的每个对象所在的类必须实现Comparable接口,并且在compareTo方法中指明是按照哪个属性进行比较的。
1 importjava.util.Iterator;2 importjava.util.Set;3 importjava.util.TreeSet;4
5 class Student implements Comparable{6 private intnum;7 privateString name;8 private intscore;9 Student(String name,int num, intscore ){10 this.num =num;11 this.name =name;12 this.score =score;13 }14
15 publicString toString(){16 return num + "……"+name + "……" +score;17 }18 @Override19 public intcompareTo(Student stu) {20 if(this.num>stu.num){21 return 1;22 }else if(this.num
30 public classTreeSetDemo01 {31
32 public static voidmain(String[] args) {33 Set allSet = new TreeSet();34
35 allSet.add(new Student("zhangsan",20,70));36 allSet.add(new Student("wangwu",27,85));37 allSet.add(new Student("lisi",30,62));38 allSet.add(new Student("zhangsan",28,65));39 allSet.add(new Student("sunqi",25,92));40 allSet.add(new Student("wwww",26,65));41
42 Iterator it =allSet.iterator();43 while(it.hasNext()){44 System.out.println(it.next());45 }46 }47 }