Java笔记(16):集合框架(02)

Posted 花醉红尘

tags:

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

1、ArrayList存储字符串并遍历

 1 package cn.itcast_01;
 2 
 3 import java.util.ArrayList;
 4 import java.util.Iterator;
 5 
 6 /*
 7  * List的子类特点:
 8  *         ArrayList:
 9  *             底层数据结构是数组,查询快,增删慢
10  *             线程不安全,效率高
11  *         Vector:
12  *             底层数据结构是数组,查询快,增删慢
13  *             线程安全,效率低
14  *         LinkedList:
15  *              底层数据结构是链表,查询慢,增删快
16  *             线程不安全,效率高
17  * 
18  * 案例:
19  *         使用List的任何子类存储字符串或者存储自定义对象并遍历。
20  * 
21  * ArrayList的使用。    
22  *         存储字符串并遍历
23  */
24 public class ArrayListDemo {
25     public static void main(String[] args) {
26         // 创建集合对象
27         ArrayList array = new ArrayList();
28 
29         // 创建元素对象,并添加元素
30         array.add("hello");
31         array.add("world");
32         array.add("java");
33 
34         // 遍历
35         Iterator it = array.iterator();
36         while (it.hasNext()) {
37             String s = (String) it.next();
38             System.out.println(s);
39         }
40 
41         System.out.println("-----------");
42 
43         for (int x = 0; x < array.size(); x++) {
44             String s = (String) array.get(x);
45             System.out.println(s);
46         }
47     }
48 }

2、ArrayList存储自定义对象并遍历

 1 package cn.itcast_01;
 2 
 3 import java.util.ArrayList;
 4 import java.util.Iterator;
 5 
 6 /*
 7  * ArrayList存储自定义对象并遍历
 8  */
 9 public class ArrayListDemo2 {
10     public static void main(String[] args) {
11         // 创建集合对象
12         ArrayList array = new ArrayList();
13 
14         // 创建学生对象
15         Student s1 = new Student("武松", 30);
16         Student s2 = new Student("鲁智深", 40);
17         Student s3 = new Student("林冲", 36);
18         Student s4 = new Student("杨志", 38);
19 
20         // 添加元素
21         array.add(s1);
22         array.add(s2);
23         array.add(s3);
24         array.add(s4);
25 
26         // 遍历
27         Iterator it = array.iterator();
28         while (it.hasNext()) {
29             Student s = (Student) it.next();
30             System.out.println(s.getName() + "---" + s.getAge());
31         }
32 
33         System.out.println("----------------");
34 
35         for (int x = 0; x < array.size(); x++) {
36             // ClassCastException 注意,千万要搞清楚类型
37             // String s = (String) array.get(x);
38             // System.out.println(s);
39 
40             Student s = (Student) array.get(x);
41             System.out.println(s.getName() + "---" + s.getAge());
42         }
43     }
44 }

3、Vector的特有功能

 1 package cn.itcast_02;
 2 
 3 import java.util.Enumeration;
 4 import java.util.Vector;
 5 
 6 /*
 7  * Vector的特有功能:
 8  * 1:添加功能
 9  *         public void addElement(Object obj)        --    add()
10  * 2:获取功能
11  *         public Object elementAt(int index)        --  get()
12  *         public Enumeration elements()            --    Iterator iterator()
13  *                 boolean hasMoreElements()                hasNext()
14  *                 Object nextElement()                    next()
15  * 
16  * JDK升级的原因:
17  *         A:安全
18  *         B:效率
19  *         C:简化书写
20  */
21 public class VectorDemo {
22     public static void main(String[] args) {
23         // 创建集合对象
24         Vector v = new Vector();
25 
26         // 添加功能
27         v.addElement("hello");
28         v.addElement("world");
29         v.addElement("java");
30 
31         // 遍历
32         for (int x = 0; x < v.size(); x++) {
33             String s = (String) v.elementAt(x);
34             System.out.println(s);
35         }
36 
37         System.out.println("------------------");
38 
39         Enumeration en = v.elements(); // 返回的是实现类的对象
40         while (en.hasMoreElements()) {
41             String s = (String) en.nextElement();
42             System.out.println(s);
43         }
44     }
45 }

4、LinkedList的特有功能

 1 package cn.itcast_03;
 2 
 3 import java.util.LinkedList;
 4 
 5 /*
 6  * LinkedList的特有功能:
 7  *         A:添加功能
 8  *             public void addFirst(Object e)
 9  *             public void addLast(Object e)
10  *         B:获取功能
11  *             public Object getFirst()
12  *             public Obejct getLast()
13  *         C:删除功能
14  *             public Object removeFirst()
15  *             public Object removeLast()
16  */
17 public class LinkedListDemo {
18     public static void main(String[] args) {
19         // 创建集合对象
20         LinkedList link = new LinkedList();
21 
22         // 添加元素
23         link.add("hello");
24         link.add("world");
25         link.add("java");
26 
27         // public void addFirst(Object e)
28         // link.addFirst("javaee");
29         // public void addLast(Object e)
30         // link.addLast("android");
31 
32         // public Object getFirst()
33         // System.out.println("getFirst:" + link.getFirst());
34         // public Obejct getLast()
35         // System.out.println("getLast:" + link.getLast());
36 
37         // public Object removeFirst()
38         System.out.println("removeFirst:" + link.removeFirst());
39         // public Object removeLast()
40         System.out.println("removeLast:" + link.removeLast());
41 
42         // 输出对象名
43         System.out.println("link:" + link);
44     }
45 }

练习:去除ArrayList集合中的重复字符串元素案例1

 1 package cn.itcast_04;
 2 
 3 import java.util.ArrayList;
 4 import java.util.Iterator;
 5 
 6 /*
 7  * ArrayList去除集合中字符串的重复值(字符串的内容相同)
 8  * 
 9  * 分析:
10  *         A:创建集合对象
11  *         B:添加多个字符串元素(包含内容相同的)
12  *         C:创建新集合
13  *         D:遍历旧集合,获取得到每一个元素
14  *         E:拿这个元素到新集合去找,看有没有
15  *             有:不搭理它
16  *             没有:就添加到新集合
17  *         F:遍历新集合
18  */
19 public class ArrayListDemo {
20     public static void main(String[] args) {
21         // 创建集合对象
22         ArrayList array = new ArrayList();
23 
24         // 添加多个字符串元素(包含内容相同的)
25         array.add("hello");
26         array.add("world");
27         array.add("java");
28         array.add("world");
29         array.add("java");
30         array.add("world");32 
33         // 创建新集合
34         ArrayList newArray = new ArrayList();
35 
36         // 遍历旧集合,获取得到每一个元素
37         Iterator it = array.iterator();
38         while (it.hasNext()) {
39             String s = (String) it.next();
40 
41             // 拿这个元素到新集合去找,看有没有
42             if (!newArray.contains(s)) {
43                 newArray.add(s);
44             }
45         }
46 
47         // 遍历新集合
48         for (int x = 0; x < newArray.size(); x++) {
49             String s = (String) newArray.get(x);
50             System.out.println(s);
51         }
52     }
53 }

练习:去除ArrayList集合中的重复字符串元素案例2

 1 package cn.itcast_04;
 2 
 3 import java.util.ArrayList;
 4 import java.util.Iterator;
 5 
 6 /*
 7  * 需求:ArrayList去除集合中字符串的重复值(字符串的内容相同)
 8  * 要求:不能创建新的集合,就在以前的集合上做。
 9  */
10 public class ArrayListDemo2 {
11     public static void main(String[] args) {
12         // 创建集合对象
13         ArrayList array = new ArrayList();
14 
15         // 添加多个字符串元素(包含内容相同的)
16         array.add("hello");
17         array.add("world");
18         array.add("java");
19         array.add("world");
20         array.add("java");
21         array.add("world");
22         array.add("world");
23         array.add("world");
24         array.add("world");
25         array.add("java");
26         array.add("world");
27 
28         // 由选择排序思想引入,我们就可以通过这种思想做这个题目
29         // 拿0索引的依次和后面的比较,有就把后的干掉
30         // 同理,拿1索引...
31         for (int x = 0; x < array.size() - 1; x++) {
32             for (int y = x + 1; y < array.size(); y++) {
33                 if (array.get(x).equals(array.get(y))) {
34                     array.remove(y);
35                     y--;
36                 }
37             }
38         }
39 
40         // 遍历集合
41         Iterator it = array.iterator();
42         while (it.hasNext()) {
43             String s = (String) it.next();
44             System.out.println(s);
45         }
46     }
47 }

5、去除ArrayList集合中的重复自定义对象元素案例

 1 package cn.itcast_04;
 2 
 3 public class Student {
 4     private String name;
 5     private int age;
 6 
 7     public Student() {
 8         super();
 9     }
10 
11     public Student(String name, int age) {
12         super();
13         this.name = name;
14         this.age = age;
15     }
16 
17     public String getName() {
18         return name;
19     }
20 
21     public void setName(String name) {
22         this.name = name;
23     }
24 
25     public int getAge() {
26         return age;
27     }
28 
29     public void setAge(int age) {
30         this.age = age;
31     }
32 
33     @Override
34     public boolean equals(Object obj) {
35         if (this == obj)
36             return true;
37         if (obj == null)
38             return false;
39         if (getClass() != obj.getClass())
40             return false;
41         Student other = (Student) obj;
42         if (age != other.age)
43             return false;
44         if (name == null) {
45             if (other.name != null)
46                 return false;
47         } else if (!name.equals(other.name))
48             return false;
49         return true;
50     }
51 
52 }
 1 package cn.itcast_04;
 2 
 3 import java.util.ArrayList;
 4 import java.util.Iterator;
 5 
 6 /*
 7  * 需求:去除集合中自定义对象的重复值(对象的成员变量值都相同)
 8  * 
 9  * 我们按照和字符串一样的操作,发现出问题了。
10  * 为什么呢?
11  *         我们必须思考哪里会出问题?
12  *         通过简单的分析,我们知道问题出现在了判断上。
13  *         而这个判断功能是集合自己提供的,所以我们如果想很清楚的知道它是如何判断的,就应该去看源码。
14  * contains()方法的底层依赖的是equals()方法。
15  * 而我们的学生类中没有equals()方法,这个时候,默认使用的是它父亲Object的equals()方法
16  * Object()的equals()默认比较的是地址值,所以,它们进去了。因为new的东西,地址值都不同。
17  * 按照我们自己的需求,比较成员变量的值,重写equals()即可。
18  * 自动生成即可。
19  */
20 public class ArrayListDemo3 {
21     public static void main(String[] args) {
22         // 创建集合对象
23         ArrayList array = new ArrayList();
24 
25         // 创建学生对象
26         Student s1 = new Student("林青霞", 27);
27         Student s2 = new Student("林志玲", 40);
28         Student s3 = new Student("凤姐", 35);
29         Student s4 = new Student("芙蓉姐姐", 18);
30         Student s5 = new Student("翠花", 16);
31         Student s6 = new Student("林青霞", 27);
32         Student s7 = new Student("林青霞", 18);
33 
34         // 添加元素
35         array.add(s1);
36         array.add(s2);
37         array.add(s3);
38         array.add(s4);
39         array.add(s5);
40         array.add(s6);
41         array.add(s7);
42 
43         // 创建新集合
44         ArrayList newArray = new ArrayList();
45 
46         // 遍历旧集合,获取得到每一个元素
47         Iterator it = array.iterator();
48         while (it.hasNext()) {
49             Student s = (Student) it.next();
50 
51             // 拿这个元素到新集合去找,看有没有
52             if (!newArray.contains(s)) {
53                 newArray.add(s);
54             }
55         }
56 
57         // 遍历新集合
58         for (int x = 0; x < newArray.size(); x++) {
59             Student s = (Student) newArray.get(x);
60             System.out.println(s.getName() + "---" + s.getAge());
61         }
62     }
63 }

6、用LinkedList实现栈结构的集合代码

 1 package cn.itcast_05;
 2 
 3 import java.util.Iterator;
 4 import java.util.LinkedList;
 5 
 6 /*
 7  *请用LinkedList模拟栈数据结构的集合,并测试
 8  *题目的意思是:
 9  *        你自己的定义一个集合类,在这个集合类内部可以使用LinkedList模拟。
10  */
11 public class LinkedListDemo {
12     public static void main(String[] args) {
13         // A: LinkedList的特有添加功能addFirst()
14         // B:栈的特点先进后出
15         // 创建集合对象
16         // LinkedList link = new LinkedList();
17         //
18         // // 添加元素
19         // link.addFirst("hello");
20         // link.addFirst("world");
21         // link.addFirst("java");
22         //
23         // // 遍历
24         // Iterator it = link.iterator();
25         // while (it.hasNext()) {
26         // String s = (String) it.next();
27         // System.out.println(s);
28         // }
29         
30         //这样做是错误的,为什么呢?
31     }
32 }
 1 package cn.itcast_05;
 2 
 3 import java.util.LinkedList;
 4 
 5 /**
 6  * 自定义的栈集合
 7  * 
 8  * @author 风清扬
 9  * @version V1.0
10  */
11 public class MyStack {
12     private LinkedList link;
13 
14     public MyStack() {
15         link = new LinkedList();
16     }
17 
18     public void add(Object obj) {
19         link.addFirst(obj);
20     }
21 
22     public Object get() {
23         // return link.getFirst();
Java集合框架学习笔记

集合框架学习笔记

Java学习笔记29(集合框架三:泛型)

JAVA 笔记 从源码深入浅出集合框架

阿花宝宝 Java基础笔记 之 集合框架

Java笔记:集合框架