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集合框架学习笔记