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

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 }
时间: 2024-10-15 12:58:22

黑马程序员——java学习8(166-总结)——集合的相关文章

黑马程序员-JAVA学习日记-数组YNPB

黑马程序员学习笔记黑马程序员编程基础数组培训.培训.期待与您交流!数组:是存储同一种数据类型的的集合,也叫容器:特点:是数组中每个元素都有索引从开始:数组的定义式:数据类型数组名数据类型元素个数:数据类型数组名数据类型元素个数:如:数据类型数组名数据类型元素数据类型数组名元素如:如果元素确定就用这一种:数组中有一个属性:获取数组中的元素个数,即数组的长度:中的内存机制:栈:存储局部变量,一般定义在函数内的变量成为局部变量:特点:当内存中数据操作完成后,所占空间会自动释放栈内存堆:是通过创建的实体

黑马程序员——JAVA学习笔记十(IO)

1,    可以从其中读入一个字节序列的对象成为输入流,可以向其中写入一个字节序列的对象就做输出流.这些字节序列的来源地可以是文件,也可以是网络连接或者内存块.抽象类InputStream和OutputStream构成了I/O层次的基础.因为字节流不便于处理以Unicode存储的信息,所以有了Writer和Reader抽象类,这些从其中继承的类都是读入和写入基于2个字节的Unicode码元,而不是单个字节.   2,    InputStream 与OutputStream: abstract

黑马程序员——JAVA学习笔记十四(高新技术三)

10 代理模式 代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息.过滤消息.把消息转发给委托类,以及事后处理消息等.代理类与委托类之间通常会存在关联关系,一个代理类的对象与一个委托类的对象关联,代理类的对象本身并不真正实现服务,而是通过调用委托类的对象的相关方法,来提供定的服务. 按照代理的创建时期,代理类可以分为两种. 静态代理:由程序员创建或特定工具自动生成源代码,再对其编译.在程序运行前,代理类的.class文件就已经存在了. 动态代

黑马程序员——JAVA学习笔记五(异常)

1,     异常:是在运行时期发生的不正常情况. 在java中用类的形式对不正常情况进行了描述和封装对象.描述不正常的情况的类,就称为异常类. 以前正常流程代码和问题处理代码相结合,现在将正常流程代码和问题处理代码分离,提高阅读性. 其实异常就是java通过面向对象的思想将问题封装成了对象,用异常类对其进行描述. 不同的问题用不同的类进行具体的描述.比如角标越界.空指针异常等等. 问题很多,意味着描述的类也很多,将其共性进行向上抽取,形成了异常体系. 不正常情况分成了两大类: Throwabl

黑马程序员-JAVA学习之银行业务调度系统分析与实现

--------android培训.java培训.期待与你交流!-------- 银行业务调度系统 模拟实现银行业务调度系统逻辑,具体需求如下:1 银行内有6个业务窗口,1 - 4号窗口为普通窗口,5号窗口为快速窗口,6号窗口为VIP窗口.2 有三种对应类型的客户:VIP客户,普通客户,快速客户(办理如交水电费.电话费之类业务的客户).3 异步随机生成各种类型的客户,生成各类型用户的概率比例为:VIP客户 :普通客户 :快速客户 = 1 :6 :3.4 客户办理业务所需时间有最大值和最小值,在该

黑马程序员-JAVA学习之反射以及Class类的常用方法

--------android培训.java培训.期待与你交流!-------- Class类 Class 类的实例表示正在运行的 Java 应用程序中的类和接口.枚举是一种类,注释是一种接口.每个数组属于被映射为 Class 对象的一个类,所有具有相同元素类型和维数的数组都共享该 Class 对象.基本的 Java 类型(boolean.byte.char.short.int.long.float 和 double)和关键字 void 也表示为 Class 对象. Class 没有公共构造方法

黑马程序员Java学习日记之 Java-其他类型

OK , 就绪, 第一篇博客开撸 ~ android培训.java培训.期待与您交流! 先听了毕姥爷激情澎湃的其他类型 ,从这里开始入手吧 : (一)System类  System类代表系统类,系统的属性和方法都放在该类.System类是一个final类, 它不能被初始化,,即System类中的属性和方法都是static的,可以直接陪调用.System的成员变量有 out,in, err 即标准输入输出和错误输入(流),常用到的System类的方法有下面几个: a. arraycopy方法 :p

黑马程序员——JAVA学习笔记十一(文件操作File)

为了很方便的代表文件的概念,以及存储一些对于文件的基本操作,在java.io包中设计了一个专门的类——File类. 在File类中包含了大部分和文件操作的功能方法,该类的对象可以代表一个具体的文件或文件夹,所以以前曾有人建议将该类的类名修改成FilePath,因为该类也可以代表一个文件夹,更准确的说是可以代表一个文件路径. 1.创建文件 1)boolean java.io.File.createNewFile() throws IOException用来创建文件,如果文件存在,创建失败,返回fa

黑马程序员——JAVA学习笔记十二(高新技术一)

 1,    静态导入: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 package com.solaire.enhance; import static java.lang.Math.max;  //import   语句可以导入一个类或某个包中的所有类 //import static  静态导入 JDK5以后才有.语句导入一个类中的某个静态方法或所有静态方法 //无名包和有包名中的类在一起,没有package,则为无名包. //一个类

黑马程序员——java学习12(毕18--总结)——IO

1.IO流 处理设备之间的数据传输 字符流为了处理文字而存在,基于字节流,其中融合了编码表 1.1.Writer--------write,flush,close java.util.FileWriter FileWriter(String fileName)根据给定的文件名构造一个FileWriter对象 java.io.OutputStreamWriter void write(String str, int off, int len)将数据写入流中 void flush()刷新流中的缓冲