黑马程序员--Java集合框架(2)
来源:互联网 发布:工程量预算软件 编辑:程序博客网 时间:2024/06/03 19:16
——- android培训、java培训、期待与您交流! ———-
ArrayList
底层数据结构是数组,查询块,增删慢
线程不安全,效率高
ArrayList的使用
存储字符串并遍历
public class ArrayListDemo { public static void main(String[] args) { // 创建集合对象 ArrayList array = new ArrayList(); // 创建元素对象,并添加元素 array.add("hello"); array.add("world"); array.add("java"); // 遍历 Iterator it = array.iterator(); while (it.hasNext()) { String s = (String) it.next(); System.out.println(s); } System.out.println("-----------"); for (int x = 0; x < array.size(); x++) { String s = (String) array.get(x); System.out.println(s); } }}
存储自定义对象并遍历
自定义对象
public class Student { private String name; private int age; public Student() { super(); } public Student(String name, int age) { super(); this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; }}
测试类
import java.util.ArrayList;import java.util.Iterator;public class ArrayListDemo2 { public static void main(String[] args) { // 创建集合对象 ArrayList array = new ArrayList(); // 创建学生对象 Student s1 = new Student("武松", 30); Student s2 = new Student("鲁智深", 40); Student s3 = new Student("林冲", 36); Student s4 = new Student("杨志", 38); // 添加元素 array.add(s1); array.add(s2); array.add(s3); array.add(s4); // 遍历 Iterator it = array.iterator(); while (it.hasNext()) { Student s = (Student) it.next(); System.out.println(s.getName() + "---" + s.getAge()); } System.out.println("----------------"); for (int x = 0; x < array.size(); x++) { Student s = (Student) array.get(x); System.out.println(s.getName() + "---" + s.getAge()); } }}
利用ArrayList集合去除字符串中的重复元素
import java.util.ArrayList;import java.util.Iterator;/* * ArrayList去除集合中字符串的重复值(字符串的内容相同) * * 分析: * A:创建集合对象 * B:添加多个字符串元素(包含内容相同的) * C:创建新集合 * D:遍历旧集合,获取得到每一个元素 * E:拿这个元素到新集合去找,看有没有 * 有:不搭理它 * 没有:就添加到新集合 * F:遍历新集合 */public class ArrayListDemo { public static void main(String[] args) { // 创建集合对象 ArrayList array = new ArrayList(); // 添加多个字符串元素(包含内容相同的) array.add("hello"); array.add("world"); array.add("java"); array.add("world"); array.add("java"); array.add("world"); array.add("world"); array.add("world"); array.add("world"); array.add("java"); array.add("world"); // 创建新集合 ArrayList newArray = new ArrayList(); // 遍历旧集合,获取得到每一个元素 Iterator it = array.iterator(); while (it.hasNext()) { String s = (String) it.next(); // 拿这个元素到新集合去找,看有没有 if (!newArray.contains(s)) { newArray.add(s); } } // 遍历新集合 for (int x = 0; x < newArray.size(); x++) { String s = (String) newArray.get(x); System.out.println(s); } }}
利用ArrayList集合去除重复自定义对象
自定义对象
需要重写equal()方法
public class Student { private String name; private int age; public Student() { super(); } public Student(String name, int age) { super(); this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Student other = (Student) obj; if (age != other.age) return false; if (name == null) { if (other.name != null) return false; } else if (!name.equals(other.name)) return false; return true; }}
测试类
import java.util.ArrayList;import java.util.Iterator;public class ArrayListDemo3 { public static void main(String[] args) { // 创建集合对象 ArrayList array = new ArrayList(); // 创建学生对象 Student s1 = new Student("林青霞", 27); Student s2 = new Student("林志玲", 40); Student s3 = new Student("凤姐", 35); Student s4 = new Student("芙蓉姐姐", 18); Student s5 = new Student("翠花", 16); Student s6 = new Student("林青霞", 27); Student s7 = new Student("林青霞", 18); // 添加元素 array.add(s1); array.add(s2); array.add(s3); array.add(s4); array.add(s5); array.add(s6); array.add(s7); // 创建新集合 ArrayList newArray = new ArrayList(); // 遍历旧集合,获取得到每一个元素 Iterator it = array.iterator(); while (it.hasNext()) { Student s = (Student) it.next(); // 拿这个元素到新集合去找,看有没有 if (!newArray.contains(s)) { newArray.add(s); } } // 遍历新集合 for (int x = 0; x < newArray.size(); x++) { Student s = (Student) newArray.get(x); System.out.println(s.getName() + "---" + s.getAge()); } }}
Vector
底层数据结构是数组,查询快,增删慢
线程安全,效率低
Vector的特有功能
import java.util.Enumeration;import java.util.Vector;/* * Vector的特有功能: * 1:添加功能 * public void addElement(Object obj) * 2:获取功能 * public Object elementAt(int index) * public Enumeration elements() * boolean hasMoreElements() * Object nextElement() * */public class VectorDemo { public static void main(String[] args) { // 创建集合对象 Vector v = new Vector(); // 添加功能 v.addElement("hello"); v.addElement("world"); v.addElement("java"); // 遍历 for (int x = 0; x < v.size(); x++) { String s = (String) v.elementAt(x); System.out.println(s); } System.out.println("------------------"); Enumeration en = v.elements(); // 返回的是实现类的对象 while (en.hasMoreElements()) { String s = (String) en.nextElement(); System.out.println(s); } }
Vector中的addElement()相当于add()
elementAt()等同于get()
elements()等同于Iterator iterator()
hasMoreElements()等同于hasNext()
nextElement()等同于next()
JDK的升级放弃这些方法的使用,JDK升级以后简化了书写,而且更加安全,效率。
LinkedList
LinkedList特有功能
import java.util.LinkedList;/* * LinkedList的特有功能: * A:添加功能 * public void addFirst(Object e) * public void addLast(Object e) * B:获取功能 * public Object getFirst() * public Obejct getLast() * C:删除功能 * public Object removeFirst() * public Object removeLast() */public class LinkedListDemo { public static void main(String[] args) { // 创建集合对象 LinkedList link = new LinkedList(); // 添加元素 link.add("hello"); link.add("world"); link.add("java"); // public void addFirst(Object e) // link.addFirst("javaee"); // public void addLast(Object e) // link.addLast("android"); // public Object getFirst() // System.out.println("getFirst:" + link.getFirst()); // public Obejct getLast() // System.out.println("getLast:" + link.getLast()); // public Object removeFirst() System.out.println("removeFirst:" + link.removeFirst()); // public Object removeLast() System.out.println("removeLast:" + link.removeLast()); // 输出对象名 System.out.println("link:" + link); }}
Arrays工具类
import java.util.Arrays;import java.util.List;/* * public static <T> List<T> asList(T... a):把数组转成集合 * * 注意事项: * 虽然可以把数组转成集合,但是集合的长度不能改变。 */public class ArraysDemo { public static void main(String[] args) { // 定义一个数组 // String[] strArray = { "hello", "world", "java" }; // List<String> list = Arrays.asList(strArray); List<String> list = Arrays.asList("hello", "world", "java"); // UnsupportedOperationException // list.add("javaee"); // UnsupportedOperationException // list.remove(1); list.set(1, "javaee"); for (String s : list) { System.out.println(s); } }}
集合的嵌套循环
每个班有学生,每一个学生是不是一个对象。所以我们可以使用一个集合表示我们班级的学生。ArrayList<Student>
但是呢,旁边还有班级,每个班级是不是也是一个ArrayList<Student>。
现在有多个ArrayList。就需要用嵌套循环。
学生类
public class Student { private String name; private int age; public Student() { super(); } public Student(String name, int age) { super(); this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; }}
测试类
import java.util.ArrayList;public class ArrayListDemo { public static void main(String[] args) { // 创建大集合 ArrayList<ArrayList<Student>> bigArrayList = new ArrayList<ArrayList<Student>>(); // 创建第一个班级的学生集合 ArrayList<Student> firstArrayList = new ArrayList<Student>(); // 创建学生 Student s1 = new Student("唐僧", 30); Student s2 = new Student("孙悟空", 29); Student s3 = new Student("猪八戒", 28); Student s4 = new Student("沙僧", 27); Student s5 = new Student("白龙马", 26); // 学生进班 firstArrayList.add(s1); firstArrayList.add(s2); firstArrayList.add(s3); firstArrayList.add(s4); firstArrayList.add(s5); // 把第一个班级存储到学生系统中 bigArrayList.add(firstArrayList); // 创建第二个班级的学生集合 ArrayList<Student> secondArrayList = new ArrayList<Student>(); // 创建学生 Student s11 = new Student("诸葛亮", 30); Student s22 = new Student("司马懿", 28); Student s33 = new Student("周瑜", 26); // 学生进班 secondArrayList.add(s11); secondArrayList.add(s22); secondArrayList.add(s33); // 把第二个班级存储到学生系统中 bigArrayList.add(secondArrayList); // 创建第三个班级的学生集合 ArrayList<Student> thirdArrayList = new ArrayList<Student>(); // 创建学生 Student s111 = new Student("宋江", 40); Student s222 = new Student("吴用", 35); Student s333 = new Student("高俅", 30); Student s444 = new Student("李师师", 22); // 学生进班 thirdArrayList.add(s111); thirdArrayList.add(s222); thirdArrayList.add(s333); thirdArrayList.add(s444); // 把第三个班级存储到学生系统中 bigArrayList.add(thirdArrayList); // 遍历集合 for (ArrayList<Student> array : bigArrayList) { for (Student s : array) { System.out.println(s.getName() + "---" + s.getAge()); } } }}
总结
这里主要讲的集合有ArrayList,Vector,LinkedList三种集合,他们都是List接口的实现类。它们有各自不同的特点!
ArrayList
- 底层数据结构是数组,查询快,增删慢。
- 线程不安全,效率高。
Vector
- 底层数据结构是数组,查询快,增删慢。
- 线程安全,效率低。
LinkedList
- 底层数据结构是链表,查询慢,增删快。
- 线程不安全,效率高。
在使用的时候,怎么来选择呢?
看具体的需求来选择具体使用那个集合。
要安全吗?
- 要:Vector
- 不要:ArrayList或者LinkedList
- 查询多;ArrayList
- 增删多:LinkedList
0 0
- 黑马程序员-java集合框架2
- “黑马程序员”Java集合框架(2)
- 黑马程序员--Java集合框架(2)
- 黑马程序员--java集合框架
- 黑马程序员 Java集合框架
- 黑马程序员 java 集合框架
- 黑马程序员 Java集合框架
- 黑马程序员--Java集合框架
- 黑马程序员--Java集合框架
- 黑马程序员-java集合框架
- 黑马程序员---Java集合框架
- 黑马程序员-Java集合框架
- 黑马程序员-java 集合框架
- 黑马程序员----java集合框架
- 黑马程序员-----java集合框架
- 黑马程序员-Java集合框架
- 黑马程序员-集合框架2
- 黑马程序员--Java基础之集合框架(2)
- iOS —— NSRunLoop / NSPart
- oracle 10g的备份和还原
- lytro原始图片重聚焦
- C和C++格式化输入输出
- Linux基本命令一
- 黑马程序员--Java集合框架(2)
- hadoop2.6.0编译使用
- oracle rac service学习
- Loadrunner 服务器压力上不去,客户端出现大量timed out
- Java性能调优笔记
- 安卓实习第二十二天
- hdu 5389 Zero Escape
- POJ 1751 Highways 最小生成树 Kruskal && Prim
- Android 实现ListView的A-Z字母排序和过滤搜索功能,实现汉字转成拼音