Collection集合

第一节集合框架及迭代器 1401-03

 1 /*collection包括list与set,list包括arraylist linkedlist vector ,set包括hashset treeSet
 2 为什么会出现这么多的容器呢?
 3 因为每一个容器对数据的存储方式都有不同,这个存储方式称之为数据结构
 4 引用变量存在于栈内存 new person()存在于堆内存*/
 5 /*
 6 Collection定义了集合框架的共性功能。
 7 1,添加add(e);addAll(collection);
 8 2,删除remove(e);removeAll(collection);clear();
 9 3,判断。contains(e);isEmpty();
10 4,获取iterator();size();
11 5,获取交集。retainAll();
12 6,集合变数组。toArray();
13 1,add方法的参数类型是Object。以便于接收任意类型对象。
14 2,集合中存储的都是对象的引用(地址)
15 什么是迭代器呢?
16 其实就是集合的取出元素的方式。
17 就是把取出方式定义在集合的内部,这样的取出方式就可以
18 直接访问集合内容的元素那么取出方式就被定义成了内部类
19 内部类可以访问容器中的成员方法 不用定义对象
20 而每一个容器的数据结构不同,所以取出的细节不同,但是有
21 共性内容判断和取出。那么可以将写共性内容抽取
22 那么这些内部类都符合一个规则,这个规则就是iterator
23 如何获取集合的取出对象呢?通过一个对外提供的方法
24 iterator();如同抓娃娃游戏机中的夹子。
25 迭代器是取出方式,会直接访问集合中的元素。
26 所以将迭代器通过内部类的形式来进行描述。
27 通过容器的iterator()方法获取该内部类的对象。*/
28 
29 package uestc;
30 
31 import java.util.ArrayList;
32 import java.util.Iterator;
33 
34 public class CollectionDemo {
35 
36     public static void main(String[] args) {
37         method_2();
38     }
39     public static void method_get() {
40         ArrayList<String> arrayList=new ArrayList<String>();
41         arrayList.add("java01");
42         arrayList.add("java02");
43         arrayList.add("java03");
44         arrayList.add("java04");
45         arrayList.add("java05");
46         arrayList.add("java06");
47         Iterator<String> iterator=arrayList.iterator();
48         while(iterator.hasNext())
49         {
50             System.out.println(iterator.next());
51         }
52     }
53     public static void method_2() 
54     {
55         ArrayList<String> arrayList=new ArrayList<>();
56         arrayList.add("java01");
57         arrayList.add("java02");
58         arrayList.add("java03");
59         arrayList.add("java04");
60         arrayList.add("java05");
61         arrayList.add("java06");
62         ArrayList<String> arraylist2=new ArrayList<String>();
63         arraylist2.add("java01");
64         arraylist2.add("java02");
65         arraylist2.add("java03");
66         arrayList.retainAll(arraylist2);//取交集
67         //System.out.println(arrayList.removeAll(arraylist2));
68         System.out.println(arrayList);
69     }
70  
71 }

 第二节 listDemo 04-06

 1 /*Collection
 2     |--List:元素是有序的,元素可以重复。因为该集合体系有索引。
 3         |--ArrayList:底层的数据结构使用的是数组结构。特点:查询速度很快。但是增删稍慢。线程不同步。50%延长数组
 4         |--LinkedList:底层使用的链表数据结构。特点:增删速度很快,查询稍慢。线程不同步。
 5         |--Vector:底层是数组数据结构。线程同步。查询、增删都慢 被ArrayList替代了。因为效率低。
 6     |--Set:元素是无序,元素不可以重复。因为集合体系没有索引
 7 List:
 8     特有方法。凡是可以操作角标的方法都是该体系特有的方法。
 9 增add(index,element);addAll(index,Collection);
10 删remove(index);改set(index,element);
11 查get(index):subList(from,to);listIterator();
12 int indexOf(obj):获取指定元素的位置。ListIterator listIterator();
13 List集合特有的迭代器。ListIterator是Iterator的子接口(继承了Iterator)。
14 在迭代时,不可以通过集合对象的方法操作集合中的元素见①处。
15 因为会发生ConcurrentModificationException异常。
16 所以,在迭代器时,只能用迭代器的方法操作元素,可是Iterator方法是有限的,
17 只能对元素进行判断,取出,删除的操作,
18 如果想要其他的操作如添加,修改等,就需要使用其子接口,ListIterator。
19 该接口只能通过List集合的listIterator方法获取。*/
20 package uestc;
21 import java.util.ArrayList;
22 import java.util.Collection;
23 import java.util.Iterator;
24 import java.util.ListIterator;
25 
26 import com.sun.xml.internal.bind.v2.schemagen.xmlschema.List;
27 public class CollectionDemo {
28     public static void method() {
29         ArrayList<String> arrayList=new ArrayList<String>();
30         arrayList.add("java01");
31         arrayList.add("java02");
32         arrayList.add("java03");
33         System.out.println(arrayList);
34         arrayList.add(1, "java09");
35         System.out.println(arrayList);
36         arrayList.remove(2);
37         System.out.println(arrayList);
38         arrayList.set(2, "java007");
39         System.out.println(arrayList);
40         for (int i = 0; i < arrayList.size(); i++) {
41             System.out.println("arraylist("+i+")="+arrayList.get(i));
42         }
43         Iterator<String> iterator=arrayList.iterator();
44         while (iterator.hasNext()) {
45             System.out.println(iterator.next());
46         }
47         System.out.println("index="+arrayList.indexOf("java09"));
48         Collection<String> subList= arrayList.subList(1, 2);
49         System.out.println("sub="+subList);
50     }
51     public static void main(String[] args) {
52         ArrayList<String> arrayList=new ArrayList<String>();
53         arrayList.add("java01");
54         arrayList.add("java02");
55         arrayList.add("java03");
56         System.out.println(arrayList);
57         ListIterator<String> listIterator=arrayList.listIterator();
58         System.out.println("hasPrevious:"+listIterator.hasPrevious());
59         System.out.println("hasNext:"+listIterator.hasNext());
60         while (listIterator.hasNext()) {
61             Object object=listIterator.next();
62             if (object.equals("java02")) {
63                 //listIterator.add("java001");
64                 listIterator.set("java001");
65             }
66             
67         }
68         System.out.println(arrayList);
69         System.out.println("hasPrevious:"+listIterator.hasPrevious());
70         while (listIterator.hasPrevious()) {
71             System.out.println(listIterator.previous());//逆向遍历 反向打印 03 001 01
72         }
73         System.out.println("hasPrevious:"+listIterator.hasPrevious());
74         System.out.println("hasNext:"+listIterator.hasNext());
75         Iterator<String> iterator=arrayList.iterator();
76         while (iterator.hasNext()) {
77             Object object=iterator.next();
78             if (object.equals("java001")) {
79                 //arrayList.add("java002");①用集合的方法与用迭代器并发执行对元素的操作会发生异常 只能用一种
80                 iterator.remove();//用迭代器的方法将java001的引用从集合中移除了
81                 }
82                 System.out.println("object="+object);//能够打印java02元素的引用移除之后故不在集合中但是还在内存中故还是被obj引用打印
83             }
84         System.out.println(arrayList);
85         
86     }
87  }

主函数运行结果如下:

 1 [java01, java02, java03]
 2 hasPrevious:false
 3 hasNext:true
 4 [java01, java001, java03]
 5 hasPrevious:true
 6 java03
 7 java001
 8 java01
 9 hasPrevious:false
10 hasNext:true
11 object=java01
12 object=java001
13 object=java03
14 [java01, java03]

第三节 枚举07

 1 /*枚举就是Vector特有的取去方式。vector去除方式有for get方法 iterator和枚举*/
 2 package uestc;
 3 import java.util.ArrayList;
 4 import java.util.Collection;
 5 import java.util.Enumeration;
 6 import java.util.Iterator;
 7 import java.util.ListIterator;
 8 import java.util.Vector;
 9 public class CollectionDemo {
10     
11     public static void main(String[] args) {
12     Vector<String> vector=new Vector<String>();
13     vector.add("java01");
14     vector.add("java02");
15     vector.add("java03");
16     vector.add("java04");
17     Enumeration<String> enumeration=vector.elements();
18     while (enumeration.hasMoreElements()) {
19         System.out.println(enumeration.nextElement());
20         }
21     }
22     
23  
24 }

第四节 LInklistDemo 14-08

 1 /*linkedlist的特有方法
 2  * offerfirst():offerlast();
 3  * //增加元素
 4  * peekfirst();peeklast();
 5  * 获取元素但不删除元素 如果集合中没有元素则返回null
 6  * pollfirst();polllast();
 7  * 获取元素但是元素被删除,如果集合中没有元素则返回null*/
 8 package uestc;
 9 import java.util.LinkedList;
10 public class CollectionDemo {
11     
12     public static void main(String[] args) {
13         LinkedList<String> linkedList=new LinkedList<>();
14         linkedList.addLast("java01");
15         linkedList.addLast("java02");
16         linkedList.addLast("java03");
17         linkedList.addLast("java04");
18         linkedList.addLast("java05");
19         System.out.println(linkedList);
20         System.out.println(linkedList.getFirst());
21         System.out.println(linkedList.getFirst());
22         System.out.println(linkedList.removeFirst());//打印将java01并删掉
23         System.out.println("size="+linkedList.size());
24         while (!linkedList.isEmpty()) {
25             System.out.println(linkedList.removeLast());
26             }
27     }
28   }

 第五节 模拟堆栈 14-09

 1 /*使用linkedlist模拟一个堆栈或者数据结构
 2  * 堆栈:先进后出,如同一个杯子
 3  * 队列:先进先出,如同一个水管*/
 4 package uestc;
 5 import java.util.ArrayList;
 6 import java.util.Collection;
 7 import java.util.Enumeration;
 8 import java.util.Iterator;
 9 import java.util.LinkedList;
10 import java.util.List;
11 import java.util.ListIterator;
12 import java.util.Vector;
13 
14 import jdk.nashorn.internal.ir.WhileNode;
15 class DuiLie
16 {
17     private LinkedList linkedList;
18     public DuiLie() {
19         linkedList=new LinkedList<>();
20     }
21     public void myAdd(Object object) {
22          linkedList.add(object);
23     }
24     public Object MyGet() {
25         return linkedList.removeFirst();//实现队列 若想实现堆栈 则改为removelist()即可
26     }
27     public boolean isNull()
28     {
29         return linkedList.isEmpty();
30     }
31 }
32 public class CollectionDemo {
33     
34     public static void main(String[] args) {
35         DuiLie duiLie=new DuiLie();
36         duiLie.myAdd("java01");
37         duiLie.myAdd("java02");
38         duiLie.myAdd("java03");
39         duiLie.myAdd("java04");
40     
41         while(!duiLie.isNull())
42         {
43             System.out.println(duiLie.MyGet());
44         }
45     }
46 }

第六节 去除Arraylsit中重复的元素 14-10

 

 1 /*去除arraylsit中的重复元素*/
 2 package uestc;
 3 import java.util.ArrayList;
 4 import java.util.Collection;
 5 import java.util.Enumeration;
 6 import java.util.Iterator;
 7 import java.util.LinkedList;
 8 import java.util.List;
 9 import java.util.ListIterator;
10 import java.util.Vector;
11 public class CollectionDemo {
12     
13     public static void main(String[] args) {
14     ArrayList<String> arrayList=new ArrayList<String>();
15     arrayList.add("java01");
16     arrayList.add("java02");
17     arrayList.add("java03");
18     arrayList.add("java04");
19     arrayList.add("java05");
20     arrayList.add("java04");
21     
22     
23 //    Iterator<String> iterator=arrayList.iterator();
24 //    while (iterator.hasNext()) {
25 //        System.out.println(iterator.next()+"..."+iterator.next());
26 //        //在迭代时循环中next调用一次就要hasnext()判断一次it里面含有偶数个元素可以 奇数个元素就报错
27 //    }
28     System.out.println(arrayList);
29     arrayList=singleElement(arrayList);
30     System.out.println(arrayList);
31     }
32     public static ArrayList<String> singleElement (ArrayList<String> arrayList) {
33         //定义一个临时容器
34         ArrayList aList=new ArrayList<String>();
35         Iterator it=arrayList.iterator();
36         while (it.hasNext()) {
37             Object object=it.next();
38             if (!aList.contains(object)) {
39                 aList.add(object);
40             }
41         }
42         return aList;
43     }
44 }

 打印结果:

1 [java01, java02, java03, java04, java05, java04]
2 [java01, java02, java03, java04, java05]

 第七节 练习14-11

 1 /*将自定义的对象作为元素存到Arraylist集合中去,并删除重复元素
 2  * 比如:存入人对象。同姓名同年龄的人视为同一个人,为重复元素
 3  * 思路:1.对人描述将数据封装进人的对象
 4  * 2.定义容器,将人存入
 5  * 3.取出
 6  * list集合判断元素是否相同,依据是元素的equals方法*/
 7 package uestc;
 8 import java.util.ArrayList;
 9 import java.util.Collection;
10 import java.util.Enumeration;
11 import java.util.Iterator;
12 import java.util.LinkedList;
13 import java.util.List;
14 import java.util.ListIterator;
15 import java.util.Vector;
16 
17 import com.sun.org.apache.bcel.internal.generic.NEW;
18 class person
19 {
20     private String name;
21     private int age;
22     public person(String name,int age) {
23     this.name=name;
24     this.age=age;
25     }
26     public boolean equals(Object object) {//移除满足 (o==null ? get(i)==null : o.equals(get(i))) 的最低索引的元素(如果存在此类元素)。如果列表中包含指定的元素,则返回 true
27         if (!(object instanceof person)) 
28             return false;
29         person p=(person)object;
30         System.out.println(this.name+"::"+p.name);
31         return this.name.equals(p.name)&&this.age==p.age;
32     }
33     public String getName() {
34         return name;
35     }
36     public int getAge() {
37         return age;
38     }
39     
40 }
41 class Demo
42 {}
43 public class CollectionDemo {
44     
45     public static void main(String[] args) {
46     ArrayList arrayList=new ArrayList();
47     //arrayList.add(new Demo());
48     arrayList.add(new person("zhangsan",1));//arraylsit.add(object obj);object obj=new perso ("zhangsan",1)
49 arrayList.add(new person("zhangsan",2)); 50 arrayList.add(new person("zhangsan",2)); 51 arrayList.add(new person("lisi",2)); 52 arrayList.add(new person("lisi",10)); 53 arrayList=singleElement(arrayList); 54 System.out.println("remove 03:"+arrayList.remove(new person("lisi", 10))); 55 //remove方法底层也是依赖元素的equals方法 56 Iterator iterator=arrayList.iterator(); 57 while (iterator.hasNext()) { 58 person person = (person) iterator.next();//是object obj=it.next() person p=(person)obj;的简写 59 System.out.println(person.getName()+"::"+person.getAge()); 60 61 } 62 } 63 public static ArrayList singleElement (ArrayList arrayList) { 64 //定义一个临时容器 65 ArrayList aList=new ArrayList(); 66 Iterator it=arrayList.iterator(); 67 while (it.hasNext()) { 68 Object object=it.next(); 69 if (!aList.contains(object)) {//contains调用的是equals进行对象的比较如果不重写equals则比较的是newperson的地址值而 70 //我们要比较的是对象的name及年龄故应该重写equals方法进行name与年龄的比较 71 aList.add(object); 72 } 73 } 74 return aList; 75 } 76 }

 输出结果:

1 lisi::zhangsan
2 lisi::wangwu
3 lisi::lisi
4 remove 03:true
5 zhangsan::1
6 wangwu::2

 第八节 14-12 SET集合

set:元素是无序(存入和取出的顺序不一定一致),元素不可以重复

  HashSet:底层数据结构是哈希表,是线程不安全的。不同步

  TreeSet:

Set集合功能室和Collection是一致的。

哈希表是按照哈希表值存在的 当哈希值不同时 对象存的哈希值不同位置 当哈希值相同时 再比较对象的内容是否相同 对象不相同则在相同的地址下顺延

第九节 14 13-14 HashSet 

hashset如何保证元素的唯一性呢?是通过元素的两个方法,hashCode和equals在、来完成,如果元素的HashCode值相同,才会判断equals是否为true,如果元素的hashcode值不同。不会调用equals 注意对于判断元素是否存在add()以及删除remove()操作依然依赖的方法是根据hashcode和后再根据equals方法 而arraylist只是依赖equals方法。

 1 /*往hash色图集合中存入自定对象
 2  * 姓名和年龄相同视为同一个人,重复元素*/
 3 package uestc;
 4 import java.util.HashSet;
 5 import java.util.Iterator;
 6 class Person
 7 {
 8     private String name;
 9     private int age;
10     Person(String name,int age)
11     {
12         this.name=name;
13         this.age=age;
14     }
15     public int hashCode()
16     {
17         System.out.println(this.name+"...hashCode");
18         return name.hashCode()+age*37;//按照题目中个的条件进行设置哈希值age*37根据哈希值与年龄判断是否存在该对象 故定义返回的新哈希值为哈希值与年龄的组合而*37保证哈希值的唯一性
19     }
20     public boolean equals(Object object)//必须为object否则不是复写
21     {
22         if (!(object instanceof Person)) {
23             return false;
24         } 
25         Person p=(Person)object;
26         System.out.println(this.name+"...equals..."+p.name);
27         return this.name.equals(p.name)&& this.age==p.age;
28     }
29     public String getName()
30     {
31         return name;
32     }
33     public int getAge() {
34          return age;
35     }
36 }
37 
38 public class CollectionDemo {
39     
40     public static void main(String[] args) {
41         HashSet<Person> hashSet=new HashSet<>();
42         hashSet.add(new Person("a1", 11));
43         hashSet.add(new Person("a2", 12));//增加的时候去判断哈希值与对象大风内容
44         hashSet.add(new Person("a2", 12));
45         hashSet.add(new Person("a3", 14));
46         Iterator<Person> iterator=hashSet.iterator();
47         while (iterator.hasNext()) {
48         Person person=iterator.next();
49         System.out.println(person.getName()+"::"+person.getAge());
50             
51         }
52     
53    }
54 }

 第十节 treeset 存储自定义对象

 1 /*set:无序,不可以重复元素
 2  *     hashset:数据结构是哈希表,线程是非同步的
 3  *  保证元素唯一性的原理:判断元素的hashcode值是否相同 如果相同 还会继续判断元素的equals方法 是否为true
 4  *  treeset:可以对set集合中的元素进行排序 放到treeset里面的对象要具有比较性 底层数据结构是二叉树 保证元素的唯一性的依据:
 5  *  compareTo方法:return 0则代表存入的数据相同只能存入第一个对象
 6  *  treeset排序的第一种的方式:让元素自身具有比较性
 7  *  元素需要实现comparable接口,覆盖compareTo方法 这种方式也叫做元素的自然排序
 8  *  第二种方式:当元素不具备比较性时 或者具备的比较性不是所需要的 这是就需要让集合自身具备比较性 在集合初始化的时候就有了比较方式
 9  *  需求:往treeset集合中存储自定对象学生
10  *  想按照学生得年龄进行排序
11  *  记住:排序时当主要条件相同时一定判断一下次要条件。字典顺序为自然顺序。
12  *  classcastexception类型转换异常*/
13 package uestc;
14 import java.util.ArrayList;
15 import java.util.HashSet;
16 import java.util.Iterator;
17 import java.util.List;
18 import java.util.TreeSet;
19 class Student implements Comparable<Object>
20 {
21     private String name;
22     private int age;
23     public Student(String name,int age)
24     {
25         this.name=name;
26         this.age=age;
27     }
28     public int compareTo(Object object) {
29         //return 1;则是进来的数据总是原来的数据大 数据一致往二叉树的右侧延伸 而treeset由小到大 取数故能按照原来存的顺序取出数据
30         if (!(object instanceof Student)) {
31             throw new RuntimeException("不是学生对象");
32         }
33         Student student=(Student)object;
34         System.out.println(this.name+"...compareto..."+student.name);
35         if (this.age>student.age) {
36             return 1;
37         }
38         if (this.age==student.age) {
39             return this.name.compareTo(student.name);
40         }
41         return -1;
42     }
43     public String getName()
44     {
45         return name;
46     }
47     public int getAge() {
48          return age;
49     }
50 }
51 
52 public class CollectionDemo {
53     
54     public static void main(String[] args) {
55         TreeSet<Student> students=new TreeSet<>();
56         students.add(new Student("lisi02", 22));
57         students.add(new Student("lisi007", 20));
58         students.add(new Student("lisi09", 19));
59         students.add(new Student("lisi08", 19));
60         Iterator<Student> iterator=students.iterator();
61         while (iterator.hasNext()) {
62             Student student=(Student)iterator.next();
63             System.out.println(student.getName()+"..."+student.getName());
64             
65         }
66         }
67 
68 }

 第十一节 Compator实现对姓名的排序

 1 /*当元素自身不具备比较性或者比较性不是所需要的 这是让容器自身具备比较性 定义了比较器 将比较器对象作为参数传递给treeset集合的构造函数
 2  * 当两种排序都存在时与比较器为主 定义一个类实现comparable接口 覆盖compare方法 而comparable里面是comparable方法*/
 3 package uestc;
 4 import java.util.ArrayList;
 5 import java.util.Comparator;
 6 import java.util.HashSet;
 7 import java.util.Iterator;
 8 import java.util.List;
 9 import java.util.TreeSet;
10 class Student implements Comparable<Object>
11 {
12     private String name;
13     private int age;
14     public Student(String name,int age)
15     {
16         this.name=name;
17         this.age=age;
18     }
19     public int compareTo(Object object) {
20         //return 1;则是进来的数据总是原来的数据大 数据一致往二叉树的右侧延伸 而treeset由小到大 取数故能按照原来存的顺序取出数据
21         if (!(object instanceof Student)) {
22             throw new RuntimeException("不是学生对象");
23         }
24         Student student=(Student)object;
25 //        System.out.println(this.name+"...compareto..."+student.name);
26         if (this.age>student.age) {
27             return 1;
28         }
29         if (this.age==student.age) {
30             return this.name.compareTo(student.name);
31         }
32         return -1;
33     }
34     public String getName()
35     {
36         return name;
37     }
38     public int getAge() {
39          return age;
40     }
41 }
42 
43 public class CollectionDemo {
44     
45     public static void main(String[] args) {
46         TreeSet<Student> students=new TreeSet<>(new MyCompator());//传入一个新的对象比较器
47         students.add(new Student("lisi02", 22));
48         students.add(new Student("lisi007", 20));
49         students.add(new Student("lisi09", 19));
50         students.add(new Student("lisi08", 19));
51         students.add(new Student("lisi08", 18));
52         Iterator<Student> iterator=students.iterator();
53         while (iterator.hasNext()) {
54             Student student=(Student)iterator.next();
55             System.out.println(student.getName()+"..."+student.getAge());
56             
57         }
58     }
59 
60 }
61 class  MyCompator implements Comparator<Object>//comparator的子类
62 {
63     public int compare(Object object1,Object object2 ) {//不用覆盖equals方法 因为继承了object类
64         Student student1=(Student)object1;
65         Student student2=(Student)object2;
66         int num=student1.getName().compareTo(student2.getName());
67         if (num==0) {
68             return new Integer(student1.getAge()).compareTo(new Integer(student2.getAge()));
69             }
70         return num;
71     }
72 }

输出结果:

lisi007...20
lisi02...22
lisi08...18
lisi08...19
lisi09...19

 第十二节 字符串长度的比较

 1 /*练习:按照字符串长度排序
 2  * 使用比较器*/
 3 package uestc;
 4 import java.util.Comparator;
 5 import java.util.Iterator;
 6 import java.util.TreeSet;
 7 
 8 
 9 public class CollectionDemo {
10     
11     public static void main(String[] args) {
12         TreeSet<String> treeSet=new TreeSet<>(new  MyCompator());//传入一个新的对象比较器
13         treeSet.add("abcd");
14         treeSet.add("acd");
15         treeSet.add("add");
16         treeSet.add("acdqw");
17         treeSet.add("ac");
18         
19         Iterator<String> iterator=treeSet.iterator();
20         while (iterator.hasNext()) {
21             System.out.println(iterator.next());
22             
23         }
24     }
25 
26 }
27 class  MyCompator implements Comparator<Object>//comparator的子类
28 {   
29     public int compare(Object object1,Object object2) 
30     {
31         String string1=(String)object1;
32         String string2=(String)object2;
33 //        if (string1.length()>string2.length()) {
34 //            return 1;
35 //            }
36 //        if (string1.length()==string2.length()) {
37 //            return 0;//若有这一句 两个相同长度的字符串则被认为成同一对象 只能存入一个
38 //           }
39         int num=new Integer(string1.length()).compareTo(string2.length());
40         if (num==0) {
41             return string1.compareTo(string2);//对相同长度的字符串 进行逐个比较
42         }
43         return num;
44     
45     }
46     
47 }

 第十三节 15 06-07 泛型的使用

 1 /*泛型:jdk1.5版本以后出现的新特性 用于解决安全问题 是一个类型安全机制 
 2  * 好处:1将运行时期出现的classcastexception转移到了编译时期
 3  * 2避免了强转
 4  * 泛型格式通过<>来定义要操作的引用数据类型*/
 5 package uestc;
 6 
 7 import java.util.Comparator;
 8 import java.util.Iterator;
 9 import java.util.TreeSet;
10 
11 public class CollectionDemo {
12     
13     public static void main(String[] args) {
14     TreeSet<String> treeSet=new TreeSet<String>();
15     treeSet.add("abc");
16     treeSet.add("absc");
17     treeSet.add("abd");
18     treeSet.add("ab");
19     Iterator<String> iterator=treeSet.iterator();
20     while (iterator.hasNext()) {
21         String string=iterator.next();
22         System.out.println(string);
23         }
24     }
25     class lenComparator implements Comparator<String>
26     {
27         public int compare(String string1,String string2) {
28             int num=new Integer(string1.length()).compareTo(new Integer(string2.length()));
29             if (num==0) {
30                 return string1.compareTo(string2);
31             }
32             return num;
33         }
34     }
35     
36 
37 }

输出结果:

ab
abc
abd
absc

15-08 泛型的定义

什么时候定义泛型类?当类中要操作的数据类型不确定的时候

 1 /*什么时候定义泛型 当类中要操作的引用数据类型不确定的时候*/
 2 package uestc;
 3 public class CollectionDemo {
 4     
 5     public static void main(String[] args) {
 6     
 7     utils<work> work=new utils<work>();
 8     work.setObject(new student());
 9     work work2=work.getObject();
10 //    Tool tool=new Tool();
11 //    tool.setObject(new student());
12 //    work worker=(work)tool.getObject();
13     }
14     
15 
16 }
17 //class Tool
18 //{
19 //    private work worker;
20 //    public void setObject(work worker) {
21 //        this.worker=worker;
22 //    }
23 //    public work getWork() {
24 //        return worker;
25 //    }
26 //}
27 class Tool
28 {
29     private Object object ;
30     public void setObject(Object object) {
31         this.object=object;
32     }
33     public Object getObject() {
34         return object;
35     }
36 }
37 class work {}
38 class student extends work{}
39 class utils<QQ>
40 {
41     private QQ q;
42     public void setObject(QQ q) {
43         this.q=q;
44         }
45     public QQ getObject() {
46         return q;
47     }
48 }
原文地址:https://www.cnblogs.com/jinxingerhuo/p/7426921.html