码迷,mamicode.com
首页 > 编程语言 > 详细

黑马程序员——java学习8(166-总结)——集合

时间:2015-07-30 22:55:58      阅读:193      评论:0      收藏:0      [点我收藏+]

标签:

1、集合

存储对象的方式

 

1.1、区别于数组

(1)集合长度可变,数组长度固定

(2)集合只能存对象,数组存储基本数据类型

同:存的都是地址,

 

1.2、CPUD

1.3、迭代器(内部类比作抓娃娃机,迭代过程比作爪子,爪子各不相同,功能有共性,都在机器内部)

技术分享 

集合取出元素的方式

 1 import java.util.*;
 2 class  CollectionDemo
 3 {
 4     public static void main(String[] args) 
 5     {
 6         
 7         method_get();
 8 
 9 
10     }
11     public static void method_get()
12     {
13         ArrayList al=new ArrayList();
14         al.add("java1");
15         al.add("java2");
16         al.add("java3");
17         al.add("java4");
18 
19         /*
20         Iterator it = al.iterator();//获取迭代器,用于取出集合中的元素    接口不能创建对象,通过集合的iterator方法,返回迭代器。
21         while(it.hasNext())
22         {
23             sop(it.next);
24         }
25         */
26         for(Iterator it=al.iterator();it.hasNext();)
27         {
28             sop(it.next());
29         }
30 
31     }
32     public static void method_2()
33     {
34         ArrayList al1=new ArrayList();
35         al1.add("java1");
36         al1.add("java2");
37         al1.add("java3");
38         al1.add("java4");
39 
40         ArrayList al2=new ArrayList();
41         al2.add("java1");
42         al2.add("java2");
43         al2.add("java5");
44         al2.add("java6");
45         
46         //al1.retainAll(al2);//取交集,al1中只保留和al2中相同的元素
47         al1.removeAll(al2);//去掉相同,留不同
48         
49         sop("al1:"+al1);
50         sop("al2:"+al2);
51     }
52     public static void base_method()
53     {
54         //创建一个集合容器,使用Collection接口的子类,ArrayList
55         ArrayList al=new ArrayList();
56 
57         //1、添加元素
58         al.add("java1");//add(Object obj)
59         al.add("java2");
60         al.add("java3");
61         al.add("java4");
62 
63         //打印原集合
64         sop("原集合"+al);
65         //3、删除元素
66         //al.remove("java2");
67         //al.clear();清空
68 
69         //4、判断元素
70         sop("java03是否存在:"+al.contains("java03"));
71         sop("集合是否为空?"+al.isEmpty());
72         //2、获取个数,集合长度
73         sop("size:"+al.size());
74         //打印改变后的集合
75         sop(al);
76     }
77     public static void sop(Object obj)
78     {
79         System.out.println(obj);
80     }
81 }

 

Collection

  |--List:元素有序,可以重复,因为该集合体有索引(下标)

    |--ArrayList:底层的数据结构是数组结构,特点:查询速度快,增删慢,线程不同步

    |--LinkedList:底层使用的是链表数据结构,特点:增删速度快,查询慢

    |--Vector:底层是数组数据结构,线程同步,被ArrayList替代

  |--Set:元素无序,元素不可以重复。

 

1.4、List

  特有方法,凡是可以操作角标的方法都是该体系特有的方法

  add(index,element);

  addAll(index, Collection);

  remove(index);

  set(index,element)

  get(index);    

  subList(from,to);

  listIterator();

 

1.4.1、ListIterator

 List集合特有迭代器 ListIterator是Iterator的子接口

在迭代时,不可通过集合对象的方法,操作集合中的元素,

因为会发生并发修改异常
ConcurrentModificationException异常

Iterator: 判断,取出,删除

ListIterator: 添加,修改

 

1.4.2、枚举

 1 package learn;
 2 import java.util.*;
 3 /*
 4  * 枚举就是Vector特有的取出方式
 5  * 发现枚举和迭代器很像,因为枚举的名称以及方法的名称都过长
 6  * 所以被迭代器取代了
 7  * IO中会用到
 8  * */
 9 public class VectorDemo {
10     public static void main(String[] args) {
11         Vector v=new Vector();
12         v.add("java01");
13         v.add("java02");
14         v.add("java03");
15         v.add("java04");
16         
17         Enumeration en=v.elements();
18         
19         while(en.hasMoreElements())
20         {
21             System.out.println(en.nextElement());
22         }
23         
24     }
25 }

 

 LinkedList练习

 1 package learn;
 2 
 3 import java.util.LinkedList;
 4 
 5 /*
 6  * 使用LinkedList模拟一个堆栈或者队列数据结构
 7  * 堆栈:先进后出,杯子
 8  * 队列:先进先出, first in first out FIFO,水管
 9  * */
10 class Duilie
11 {
12     private LinkedList link;
13     Duilie()
14     {
15         link = new LinkedList();
16     }
17     public void myAdd(Object obj)
18     {
19         link.addFirst(obj);
20     }
21     public Object myGet()
22     {
23         return link.removeLast();
24     }
25     public boolean isNull()
26     {
27         return    link.isEmpty();
28     }
29     
30     
31 }
32 public class LinkedListTest {
33     public static void main(String[] args) {
34         Duilie dl=new Duilie();
35         dl.myAdd("java01");
36         dl.myAdd("java02");
37         dl.myAdd("java03");
38         dl.myAdd("java04");
39         while(!dl.isNull())
40         {
41             System.out.println(dl.myGet());
42         }
43     }
44 }

 

去除ArrayList集合中的重复元素

 1 package learn;
 2 
 3 import java.util.ArrayList;
 4 import java.util.Iterator;
 5 
 6 /*
 7  * 去除ArrayList集合中的重复元素 
 8  * */
 9 public class ArrayListTest {
10     public static void main(String[] args) {
11         ArrayList al=new ArrayList();
12         al.add("java01");
13         al.add("java02");
14         al.add("java01");
15         al.add("java02");
16         al.add("java01");
17 //        al.add("java03");
18         /*
19          * 在迭代器循环中next调用一次,就要hasNext判断一次
20         Iterator it=al.iterator();
21         while(it.hasNext())
22         {
23             sop(it.next()+"..."+it.next());
24         }
25         */
26         sop(al);
27         al=singleElement(al);
28         sop(al);
29         
30     }
31     public static void sop(Object obj)
32     {
33         System.out.println(obj);
34         
35     }
36     public static ArrayList singleElement(ArrayList al)
37     {
38         ArrayList newal=new ArrayList();
39         Iterator it=al.iterator();     //根据传递进来的arraylist创建迭代器,存放如全新的newal
40         while(it.hasNext())
41         {
42             Object obj=it.next();
43             if(!newal.contains(obj))
44             {
45                 newal.add(obj);
46             }
47             
48         }
49         return newal;
50     }
51 }

 

 

 1 package learn;
 2 
 3 /*
 4  *将自定义对象作为元素存到ArrayList集合中,并去除重复元素
 5  *比如:存入对象,同姓名,同年龄,视为同一个人,为重复元素 
 6  * */
 7 import java.util.ArrayList;
 8 import java.util.Iterator;
 9 
10 class Person{
11     private String name;
12     private int age;
13     Person(String name,int age)
14     {
15         this.name=name;
16         this.age=age;
17     }
18     //Person的字符串方法
19     public boolean equals(Object obj)
20     {
21         
22         if(!(obj instanceof Person))
23             return false;
24         Person p =(Person)obj;
25         System.out.println(this.name+"..."+p.name);
26         //字符串的equals方法
27         return this.name.equals(p.name)&& this.age==p.age;
28         
29     }
30     public String getName()
31     {
32         return name;
33     }
34     public int getAge()
35     {
36         return age;
37     }
38 }
39 
40 
41 public class ArrayListTest2 {
42     public static void sop(Object obj)
43     {
44         System.out.println(obj);
45     }
46     public static void main(String[] args) {
47         
48     
49         ArrayList al=new ArrayList();
50         al.add(new Person("lisi01",30));//al.add(Object obj);//Object obj=new Person("lisi01",30);
51         al.add(new Person("lisi02",32));
52         al.add(new Person("lisi02",32));
53         al.add(new Person("lisi03",33));
54         al.add(new Person("lisi04",35));
55         al.add(new Person("lisi04",35));
56         
57         al=singleElement(al);
58         sop("remover 03:"+al.remove(new Person("lisi03",33)));
59         Iterator it=al.iterator();
60         while(it.hasNext())
61         {
62 //            Object obj=it.next();
63 //            Person p=(Person)obj;
64             Person p=(Person)it.next();
65             sop(p.getName()+"..."+p.getAge());
66         }
67         
68     }
69     public static ArrayList singleElement(ArrayList al)
70     {
71         //定义一个临时容器
72         ArrayList newal=new ArrayList();
73         Iterator it=al.iterator();     //根据传递进来的arraylist创建迭代器,存放如全新的newal
74         while(it.hasNext())
75         {
76             Object obj=it.next();
77             if(!newal.contains(obj))//contains中含有equals
78             {
79                 newal.add(obj);
80             }
81             
82         }
83         return newal;
84     }
85 }

 

1.5、Set

1.5.1、HashSet

 1 package learn;
 2 
 3 import java.util.HashSet;
 4 import java.util.Iterator;
 5 
 6 //|--Set:无序(存入、取出顺序不一致),元素不可重复
 7 //        |--HashSet:底层数据结构是哈希表
 8 //        |--HashSet是如何保证元素唯一性
 9             //通过元素的hashCode和equals
10             //若元素HashCode值相同,才会判断equals是否为true
11             //不同则不调
12 //注意,对于判断元素是否存在,以及删除操作,依赖的方法是,元素的hashcode(先)和equals方法
13 //set集合的功能时和Collection一致的
14 public class HashSetDemo {
15     public static void sop(Object obj){
16         System.out.println(obj);
17     }
18     public static void main(String[] args) {
19         //按照地址存进去的
20         HashSet hs = new HashSet();
21         
22         //添加失败
23         sop(hs.add("java01"));    
24         sop(hs.add("java01"));    
25         hs.add("java01");
26         hs.add("java01");
27         hs.add("java02");
28         hs.add("java03");
29         hs.add("java04");
30         Iterator it=hs.iterator();
31         while(it.hasNext())
32         {
33             sop(it.next());
34         }
35     }
36 }

 

 1 package Test;
 2 import java.util.HashSet;
 3 import java.util.Iterator;
 4 /*
 5  * 往HashSet集合中存入自定义对象,姓名年龄相同视为重复对象
 6  * */
 7 class Person{
 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*39;//防止相加后的哈希值相同
19     }
20     //Person的字符串方法
21     public boolean equals(Object obj)
22     {
23         
24         if(!(obj instanceof Person))
25             return false;
26         Person p =(Person)obj;
27         System.out.println(this.name+"...equals..."+p.name);
28         //字符串的equals方法
29         return this.name.equals(p.name)&& this.age==p.age;
30         
31     }
32     public String getName()
33     {
34         return name;
35     }
36     public int getAge()
37     {
38         return age;
39     }
40 }
41 
42 public class HashSetTest {
43     public static void sop(Object obj)
44     {
45         System.out.println(obj);
46     }
47     public static void main(String[] args) {
48         HashSet hs=new HashSet();
49         hs.add(new Person("a1",11));
50         hs.add(new Person("a2",12));
51         hs.add(new Person("a3",13));
52         hs.add(new Person("a2",12));
53 //        hs.add(new Person("a4",14));
54         Iterator it=hs.iterator();
55         while(it.hasNext())
56         {
57             Person p=(Person)it.next();
58             sop(p.getName()+"..."+p.getAge());
59         }
60     }
61 }

 

黑马程序员——java学习8(166-总结)——集合

标签:

原文地址:http://www.cnblogs.com/sunxlfree1206/p/4690816.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!