java基础27 单例集合Collection及其常用方法

1、集合

     集合是存储对象数据的集合容器

 1.1、集合比数组的优势

    1.集合可以存储任意类型的数据,数组只能存储同一种数据类型的数据
    2.集合的长度是变化的,数组的长度是固定的

1.2、数组:存储同一种类型集合的容器
1.3、 数组的特点
    1.只能存储同一种数据类型
    2.一旦初始化,长度固定
    3.数组中的元素与元素之间的内存地址是连续的

    注意: object类型的数组可以存任意类型的数据

问题:使用ArrayList无参构造函数创建对象,默认容量是多少?如果长度不够又自增多少?
    答:ArrayList底层是维护一个Object数组实现的,使用无参构造函数时,Object默认容量是10,当长度不够时,自动增长0.5倍

2、集合体系                   Collection集合详解

单例集合的体系:

---------| collection  单例集合的根接口
--------------| List  如果实现了list接口的集合类,具备的特点:有序,可重复       注:集合中的有序不是指自然顺序,而是指添加进去的顺序与出来的顺序是一致的
------------------| ArrayList  ArrayList底层维护了一个object数组的实现的。(线程不安全),特点:查询速度快,增删速度慢。有序,可重复
------------------| LinkedList  LinkedList底层是使用链表结构实现的,线程不安全,特点:查询速度慢,增删速度快。有序,可重复
------------------|
Vector(了解即可)  底层也是维护一个Object数组的实现的,实现与ArrayList是一样的,但是Vector是线程安全的,操作效率低
--------------| Set  如果实现了set接口的集合类,具备的特点:无序,不可重复     注:集合中的无序不是指自然顺序,而是指添加元素进去的顺序与元素出来的顺序是不一致的
------------------| HashSet  底层是用于一个哈希表支持的。线程不安全,特点:存储速度块
------------------| TreeSet   底层是使用红黑树(二叉树)数据结构实现的,线程不同步(即线程不安全),不能在多线程中共享,但可以使用synchroinzedMap()方法来实现同步。特点:会对元素进行排序存储(按自然顺序

双例集合体系:

----------| Map  双例集合的根接口。如果是实现了Map接口的集合类,具备的特点:存储的数据都是以键值对形式存在的,键不可重复,值可以重复
--------------| HashMap  底层是基于哈希表实现的,HashMap允许键和值为null,线程不安全,特点:存储速度块
--------------| TreeMap  基于红黑数(二叉树)数据结构实现的,线程不同步(即线程不安全),特点:会对元素经行排序存储
--------------| HashTable(了解即可)  线程安全

2.1、Collection的一些方法

/*
 * 增加
 * add(E e) //向本集合中添加元素
 * addAll(Collection<? extends E> c) //向另一个集合中添加指定的集合(里面的所有元素).
 *
 * 删除
 * clear() //删除指定集合
 * remove(Object o) //指定删除的元素
 * removeAll(Collection<?> c) //删除c1,以及c和c1的交集部分.
 * retainAll(Collection<?> c) //保留c1,以及c和c1的交集部分.
 *
 * 查看
 * size() //返回当前集合中元素的个数
 *
 * 判断
 * isEmpty() //判断集合是否为空
 * contains(Object o)  //判断该集合中是否包含该集合指定元素
 * containsAll(Collection<?> c) //判断该集合是否包含指定集合中的所有元素
 *
 * 迭代
 * toArray() //返回一个包含此集合中所有元素的数组    相当于把集合转换成数组的形式
 * iterator() //返回此集合中的元素的迭代器
 * */

2.2、实例

增、删、查 方法

 1 package com.zn.collection;
 2 
 3 import java.util.ArrayList;
 4 import java.util.Collection;
 5 
 6 /**
 7  * @author DSHORE / 2018-5-15
 8  *
 9  */
10 public class Demo1 {
11     public static void main(String[] args) {
12         Collection<String> c=new ArrayList<String>();//父类的引用类型指向子类的对象
13         c.add("张三");
14         c.add("李四");
15         c.add("王五");
16         System.out.println(c);//返回值:[张三, 李四, 王五]
17         
18         //添加        创建集合
19         Collection<String> c2=new ArrayList<String>();
20         c2.add("张三");
21         c2.add("狗蛋");
22         c2.add("狗娃");
23         c.addAll(c2);
24         System.out.println(c);//返回值:[张三, 李四, 王五, 张三, 狗蛋, 狗娃]
25             
26         //删除
27         //c.clear();
28         //System.out.println(c);//返回值:[]   集合中没有元素,已被删除
29         //c.remove("狗蛋");
30         //System.out.println(c);//返回值:[张三, 李四, 王五, 张三, 狗娃]
31         //c.removeAll(c2);//删除c2集合,以及c集合与c2集合的交集部分
32         //System.out.println(c);//返回值:[李四, 王五]
33         c.retainAll(c2);//保留c2集合,以及c集合与c2集合的交集部分
34         System.out.println(c);//返回值:[张三, 张三, 狗蛋, 狗娃]
35 
36         //查看
37         System.out.println("查看集合的元素个数:"+c.size());//返回值:查看集合的元素个数:6
38     }
39 }

判断方法

 1 package com.zn.collection;
 2 
 3 import java.util.ArrayList;
 4 import java.util.Collection;
 5 
 6 /**
 7  * @author DSHORE / 2018-5-15
 8  *
 9  */
10 /*
11  * isEmpty() //判断集合是否为空
12  * contains(Object o)  //判断该集合中是否包含该集合指定元素
13  * containsAll(Collection<?> c) //判断该集合是否包含指定集合中的所有元素
14  * */
15 class Person{
16     String name;
17     int id;
18     public Person(String name, int id) {
19         super();
20         this.name = name;
21         this.id = id;
22     }
23     @Override
24     public String toString() {
25         return "Person [name=" + name + ", id=" + id + "]";
26     }
27     
28     @Override
29     public boolean equals(Object obj) {
30         Person p=(Person)obj;
31         return this.id==p.id;
32     }
33 }
34 public class Demo2 {
35     public static void main(String[] args) {
36         Collection<String> c=new ArrayList<String>();//父类的引用类型指向子类的对象
37         c.add("张三");
38         c.add("李四");
39         c.add("王五");
40         System.out.println("判断集合是否为空:"+c.isEmpty());//返回值:false
41         System.out.println("判断该集合是否包含指定元素:"+c.contains("孙尚香"));//返回值:false
42         System.out.println("判断该集合是否包含指定元素:"+c.contains("王五"));//返回值:true
43     
44         //集合中添加自定义元素
45         Collection c1=new ArrayList();//父类的引用类型指向子类的对象
46         //下面添加的都是对象
47         c1.add(new Person("狗娃", 1)); 
48         c1.add(new Person("狗剩", 2));
49         c1.add(new Person("狗蛋", 3));
50         
51         Collection c2=new ArrayList();
52         c2.add(new Person("狗娃", 1));
53         c2.add(new Person("狗剩", 2));
54         c2.add(new Person("孙尚香", 3));
55         
56         System.out.println("c1集合中元素包含c2集合中的元素吗? "+c1.containsAll(c2));//返回值:true  说明:这里是根据id判断的,由上面的equals()方法可以看出。
57     }
58 }

迭代方法

toArray()
 1 package com.zn.collection;
 2 
 3 import java.util.ArrayList;
 4 import java.util.List;
 5 
 6 /**
 7  * @author DSHORE / 2018-5-15
 8  * 
 9  * toArray:返回一个包含此集合中所有元素的数组    相当于把集合转换成数组的形式
10  * 
11  * List 如果实现了list接口的集合类,具备的特点:有序,可重复
12  * set 如果实现了set接口的集合类,局部特点:无序,不可重复
13  */
14 class Persons {
15     String name;
16     public Persons(String name) {
17         super();
18         this.name = name;
19     }
20     @Override
21     public String toString() {
22         return "Person [name=" + name + "]";
23     }
24 }
25 public class Demo4 {
26     public static void main(String[] args) {
27         List<Object> list=new ArrayList<Object>();
28         list.add(new Persons("张三"));
29         list.add(new Persons("李四"));
30         list.add(new Persons("王五"));//可重复
31         list.add(new Persons("王五"));
32         //方式1:报错
33         Person[] persons = (Person[]) list.toArray();
34         for (int i = 0; i < persons.length; i++) {
35             System.out.println(persons[i]);//报异常:Exception in thread "main" java.lang.ClassCastException
36         }
37         //方式1
38         Object[] object = list.toArray(); //toArray把集合中的元素存储到一个Object类型的数组中,并返回
39         for (int i = 0; i < object.length; i++) {
40             System.out.println(object[i]);
41             /*运行结果:
42              * Person [name=张三]
43              * Person [name=李四]
44              * Person [name=王五]
45              * Person [name=王五]
46              **/
47         }
48         //方式2
49         //Person[] person = new Person[];
50         Persons[] person = (Persons[])list.toArray(new Persons[5]);//toArray:返回一个包含此集合中所有元素的数组    相当于把数组转换成集合的形式
51         System.out.println(list);//返回值:[Person [name=张三], Person [name=李四], Person [name=王五], Person [name=王五]]
52 
53         System.out.println(person);//返回值:[Lcom.zn.collection.Persons;@544a5ab2      内存地址
54         for(int i = 0; i < person.length; i++){//遍历出 数组里面的具体数据
55             System.out.println(person[i]);
56             /*运行结果:  解析:该数组长度为5;数据只有4条,故最后一条数据为null
57               Person [name=张三]
58               Person [name=李四]
59               Person [name=王五]
60               Person [name=王五]
61               null
62              */
63         }
64     }
65 }
iterator()
 1 package com.zn.collection;
 2 
 3 import java.util.ArrayList;
 4 import java.util.Iterator;
 5 /**
 6  * @author DSHORE / 2018-5-15
 7  *
 8  * iterator() //返回此集合中的元素的迭代器
 9  */
10 //需求:编写一个函数清除集合中的重复元素.如果书号是一样的视为重复元素
11 class Book{
12     int id;
13     String name;
14     public Book(int id, String name) {
15         super();
16         this.id = id;
17         this.name = name;
18     }
19     @Override
20     public String toString() {
21         return "Book [id=" + id + ", name=" + name + "]";
22     }
23     @Override
24     public boolean equals(Object obj) {
25             Book book=(Book)obj;
26         return this.id==book.id;//根据id判断是否相等
27     }
28 }
29 public class Demo3 {
30     public static void main(String[] args) {
31         ArrayList list=new ArrayList();
32         list.add(new Book(110, "java编程思想"));
33         list.add(new Book(220,"java核心技术"));
34         list.add(new Book(330,"深入javaweb"));
35         list.add(new Book(110,"java神书"));
36         System.out.println(list);
37         ArrayList al=clearRepeat(list);
38         System.out.println("新集合中的元素是:"+al);    
39     }
40     public static ArrayList clearRepeat(ArrayList list){
41         //创建一个新的集合
42         ArrayList newList=new ArrayList();
43         //获取迭代器
44         Iterator it=list.iterator();
45         while(it.hasNext()){//遍历 (遍历就集合中的元素)   it.hasNext():判断是否还有元素可以迭代,有则返回true
46             Book book=(Book) it.next();//从旧集合中获取的元素   it.next():下一个元素
47             if(!newList.contains(book)){//判断newList集合是否包含list集合中的元素。  有两个id是110的,故 新集合中会过滤掉一条110的数据   
48                 //如果新集合中没有包含该书籍,那么就存储到新集合中
49                 newList.add(book);
50             }
51         }
52         return newList;    
53     }
54 }

 

 

 

 

 

 

原创作者:DSHORE

作者主页:http://www.cnblogs.com/dshore123/

原文出自:http://www.cnblogs.com/dshore123/p/9026087.html

欢迎转载,转载务必说明出处。(如果本文对您有帮助,可以点击一下右下角的 推荐,或评论,谢谢!

posted @ 2018-05-11 18:16  DSHORE  阅读(923)  评论(0编辑  收藏  举报