Java类集总结之一

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java类集总结之一相关的知识,希望对你有一定的参考价值。

1)类集:一个动态的对象数组,是对一些实现好的数据结构进行了包装。

 

2)在使用各个类集接口时,如果没有指定泛型,则肯定会出现警告信息,

此时,泛型将被擦除而全部使用Object接收。

 

3)类集框架本身不受对象数组长度的限制。

 

4)Collection接口

此接口使用了泛型,可以保证类集操作的安全性,避免发生ClassCastException

Collection接口是单值存放的最大父接口。

 

5)在开发中,很少直接使用Collectioin接口进行开发,基本上都是使用其子类接口。

子类接口主要有

List:可以存放重复的内容

Set:不能存放重复的内容,所有重复内容靠hashCode()equals()两个方法区分

Queue:队列接口

SortedSet:可以对集合中的数据进行排序

 

6)集合的标准输出:

迭代输出:Iterator接口

只要用到集合的输出操作,就一定使用Iterator接口。

使用Iterator迭代器可以用来查找、删除指定的元素。

 

7)CollectionSetList接口都属于单值的操作,即每次只能操作一个对象,

Map接口每次可以操作一对对象,即二元偶对象,Map中的每个元素都使用key  value

的形势存储在集合中。

 

8)Collections集合工具类

通过此类可以方便地操作集合,如替换、检索、排序等操作。

9)

 1 package cn.itcast.arraylist.demo;
 2 
 3 import java.util.ArrayList;
 4 import java.util.Collection;
 5 import java.util.List;
 6 
 7 public class ArrayListDemo {
 8 
 9     public static void main(String[] args) {
10         List<String> allList = null;//定义List对象
11         Collection<String> allCollection = null;//定义Collection对象
12         allList = new ArrayList<String>();//实例化List对象,只能是String类型
13         allCollection = new ArrayList<String>();///实例化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 }

注:ArrayListList的子类,直接通过对象的多态性为List实例化

ListCollection的子类,通过对象的多态性有ArrayList实例化。

顺序:Collection(接口)

List(接口)

ArrayList(子类)

 

注意:集合不是数组:

10)

 1 import java.util.ArrayList;
 2 import java.util.List;
 3 
 4 public class ArrayListDemo03 {
 5 
 6     public static void main(String[] args) {
 7         List<String> allList = null;
 8         allList = new ArrayList();
 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<allList.size();i++){
14             System.out.println(allList.get(i));
15         }
16         String str[] = allList.toArray(new String[] {});//集合变数组
17         System.out.println("数组输出");    
18         for(int j=0;j<str.length;j++){
19             System.out.println(str[j]);
20         }
21     }
22 
23 }

11)

Set接口是Collection的子类,没有对Collection进行扩充,但是要求更严格,不能存放重复内容;当存入重复内容时,重复元素只增加一次。

Set接口的实例无法像List接口那样进行双向输出,因为此接口没有提供像List那样的get(int index)方法。

顺序:

Collection(接口)

Set(接口)

SortedSet(接口)HashSet(子类)、TreeSet(子类)

 

HashSet里面不能存放重复元素,而且采用散列的存储方式,所以没有顺序,即输出是随机顺序。

12)

 

 1 import java.util.HashSet;
 2 import java.util.Set;
 3 
 4 public class HashSetDemo01 {
 5 
 6     public static void main(String[] args) {
 7         Set<String> allSet = new HashSet<String>();
 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 import java.util.HashSet;
 2 import java.util.Set;
 3 
 4 class Person {
 5     private String name;
 6     private int age;
 7     public Person(String name,int age){
 8         this.name = name;
 9         this.age = age;
10     }
11     public boolean equals(Object obj){
12         if(this==obj){
13             return true;
14         }
15         if(!(obj instanceof Person)){
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 int hashCode(){
26         return this.name.hashCode() * this.age;
27     }
28     public String toString(){
29         return "姓名"+this.name+":年龄"+this.age;
30     }
31 }
32 
33 public class RepeatHashSet {
34 
35     public static void main(String[] args){
36         Set<Person> allSet = new HashSet<Person>();
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 import java.util.Set;
 2 import java.util.TreeSet;
 3 
 4 public class TreeSetDemo01 {
 5 
 6     public static void main(String[] args) {
 7         Set<String> allSet = new TreeSet<String>();
 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 import java.util.Iterator;
 2 import java.util.Set;
 3 import java.util.TreeSet;
 4 
 5 class Student implements Comparable<Student>{
 6     private int num;
 7     private String name;
 8     private int score;
 9     Student(String name,int num, int score ){
10         this.num = num;
11         this.name = name;
12         this.score = score;
13     }
14     
15     public String toString(){
16         return num + "……"+name + "……" + score;
17     }
18     @Override
19     public int compareTo(Student stu) {
20         if(this.num>stu.num){
21             return 1;
22         }else if(this.num<stu.num){
23             return -1;
24         }else{
25             return 0;
26         }
27     }
28 }
29 
30 public class TreeSetDemo01 {
31 
32     public static void main(String[] args) {
33         Set<Student> allSet = new TreeSet<Student>();
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<Student> it = allSet.iterator();
43         while(it.hasNext()){
44             System.out.println(it.next());
45         }
46     }
47 }

 






以上是关于Java类集总结之一的主要内容,如果未能解决你的问题,请参考以下文章

Java类集总结之二

Java集合总结之Collection整体框架

Java 类集初探

第41节:Java当中的类集框架

浅谈java类集框架和数据结构

Java类集-list