1、集合
集合 : 对象的容器,定义了多个对象进行操作的常用方法。可实现数组功能。
和数组的区别 ;
-
数组长度固定,集合长度不固定。
-
数组可以存储基本类型和引用类型,集合只能存储引用类型。(装箱操作)
2、Collection体系集合
(1、1.1 )
特点 : 代表一组任意类型的对象,无序,无下标,不能重复。
方法 : boolean add(Object obj) // 添加一个对象
boolean add All(Collection c) // 将一个集合的所有对象添加到此集合中。
void clear() // 清空此集合中所有的对象。
boolean contains(Object o) // 检查此集合中是否包含o对象
boolean equals(Object o) // 比较此集合是否与指定对象相等
boolean isEmpty() // 判断刺激和是否为空
boolean remove(Object o) // 在此集合中移除o对象
int size() // 返回此集合中的个数
Object [] toArray() // 将此集合转换为数组
package Collection; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; /** Collection接口的使用 1.添加与删除元素 2.遍历元素 3.判断元素是否存在 */ public class Test01 { public static void main(String[] args) { //创建集合 Collection collection = new ArrayList(); //添加元素 collection.add("苹果"); collection.add("西瓜"); collection.add("草莓"); System.out.println("元素个数" + collection.size()); System.out.println(collection); //删除元素 collection.remove("苹果"); System.out.println(collection); //遍历元素 //1.增强for循环 for (Object object:collection) { System.out.println(object); } //2.使用迭代器,迭代器专门用来遍历集合的一种方式 Iterator it = collection.iterator(); while (it.hasNext()){ String s = (String) it.next(); System.out.println(s); } //判断 System.out.println(collection.contains("西瓜")); System.out.println(collection.isEmpty());//判断是否为空 } }
package Collection; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; /** * Collection 保存学生信息 * */ public class Test02 { public static void main(String[] args) { Collection collection = new ArrayList(); Student s1 = new Student("张三",10); Student s2 = new Student("李四",15); Student s3 = new Student("王五",15); //1.添加数据 collection.add(s1); collection.add(s2); collection.add(s3); System.out.println(collection.size()); System.out.println(collection); //2.删除 collection.remove(s1); System.out.println(collection.size()); //3.遍历 //1.增强for循环 for (Object object :collection) { Student s = (Student) object; System.out.println(s); } //2.迭代器 Iterator it = collection.iterator(); while (it.hasNext()){ Student s = (Student)it.next(); System.out.println(s); } //4.判断 System.out.println(collection.contains(s1)); } }
Student 类
package Collection; //学生类 public class Student { private String name; private int age; public Student(String name, int age) { 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 String toString() { return "Student{" + "name='" + name + '\'' + ", age=" + age + '}'; } }
3、List集合
特点 :有序,有下标、元素可重复。
方法 : void add(int index,Object o) // 在index位置插入o
boolean addAll(int index,Collection c) // 将一个集合中的元素添加到此集合中Index位置中。
Object get(int index) // 返回集合中指定位置的元素
List subList(int fromIndex,int toIndex) // 返回fromIndex和toIndex之间的集合元素。
package Collection; import java.util.*; public class Test03 { public static void main(String[] args) { //先创建集合对象 List list = new ArrayList<>(); //添加元素 list.add("苹果"); list.add("小米"); list.add("华为"); list.add(1, "一加"); System.out.println(list.toString()); //删除元素 list.remove("苹果"); System.out.println(list.toString()); //遍历循环 //1.for循环 for (int i = 0; i < list.size(); i++) { System.out.println(list.get(i)); } //2.增强for循环 for (Object object : list) { System.out.println(object); } //3.迭代器 Iterator it = list.iterator(); while (it.hasNext()) { System.out.println(it.next()); } //4.使用列表迭代器,和Iterator的区别,ListIterator可以向前或向后遍历、添加、删除、修改元素 ListIterator lit = list.listIterator(); while (lit.hasNext()){ System.out.println(lit.next()+" : "+lit.nextIndex()); } //从后往前 while (lit.hasPrevious()){ System.out.println(lit.previousIndex()+" : "+lit.previous()); } //判断 System.out.println (list.contains("苹果")); //获取位置 System.out.println (list.indexOf("华为")); } }
package Collection; import java.util.*; import java.util.List; public class Test04 { public static void main(String[] args) { //创建一个集合 List list = new ArrayList(); //添加数字数据(自动装箱) list.add(20); list.add(30); list.add(40); list.add(50); list.add(60); System.out.println(list.size()); System.out.println(list.toString()); //删除操作 list.remove(0); //删除的是根据下标来删除的 System.out.println(list.size()); //sunList : 返回子集合 List subList = list.subList(1, 3);//包含一,不包含三 System.out.println(subList); } }
1.List实现类总结
ArrayList 特点 :
-
数组结构实现、查询快、增删慢。
-
运行效率快,线程不安全。
源码分析 :
-
DEFAULT_CAPACITY = 10; // 默认容量,这是向集合中添加元素的默认容量,
如果没添加元素,默认容量为0,如果超过默认容量,每次扩容1.5倍。
-
elementData // 存放数组元素
-
size // 实际元素个数
-
add() // 添加元素
Vector 特点 :
-
数组结构实现、查询快、增上慢。
-
运行效率低、线程安全。
LinkList 特点 :
-
链表结构实现、增删快、查询慢
-
双向链表
4、ArrayList
package Collection; import java.util.ArrayList; import java.util.Iterator; import java.util.ListIterator; //ArrayList演示 public class Test05 { public static void main(String[] args) { //创建集合 ArrayList arrayList = new ArrayList(); //添加元素 Student s1 = new Student("张三",10); Student s2 = new Student("李四",15); Student s3 = new Student("王五",18); arrayList.add(s1); arrayList.add(s2); arrayList.add(s3); System.out.println(arrayList.size()); System.out.println(arrayList.toString()); //删除元素 arrayList.remove(s2); System.out.println(arrayList); //遍历 //1.使用迭代器 Iterator it = arrayList.iterator(); while (it.hasNext()){ Student s = (Student) it.next(); System.out.println(s); } //2.列表迭代器 ListIterator lit = arrayList.listIterator(); while (lit.hasNext()){ Student s = (Student) lit.next(); System.out.println(s); } while (lit.hasPrevious()){ Student s = (Student) lit.previous(); System.out.println(s); } //判断 System.out.println(arrayList.contains(s1)); //查找 System.out.println(arrayList.indexOf(s1)); } }
5、Vector
package Collection; import java.util.Enumeration; import java.util.Iterator; import java.util.ListIterator; import java.util.Vector; //Vector演示 public class Test06 { public static void main(String[] args) { //创建集合 Vector vector = new Vector(); //1.添加元素 vector.add("草莓"); vector.add("橘子"); vector.add("苹果"); vector.add("山楂"); System.out.println(vector); //2.删除元素 vector.remove("草莓"); System.out.println(vector); //3.遍历 Iterator it = vector.iterator(); while (it.hasNext()){ String s = (String) it.next(); System.out.println(s); } ListIterator i1 = vector.listIterator(); while (i1.hasNext()) { String s = (String) i1.next(); System.out.println(s); } //使用枚举器 Enumeration en = vector.elements(); while (en.hasMoreElements()){ Object e = en.nextElement(); System.out.println(e); } //4.判断 System.out.println(vector.contains("西瓜")); System.out.println(vector.isEmpty()); //5.vector其他方法 vector.firstElement(); vector.lastElement(); Object o = vector.elementAt(0); System.out.println(o); } }
6、LinkedList
package Collection; import java.util.Iterator; import java.util.LinkedList; //LinkedList集合 public class Test07 { public static void main(String[] args) { //创建集合 LinkedList list = new LinkedList(); //1.添加元素 Student s1 = new Student("刘德华",5); Student s2 = new Student("张学友",5); Student s3 = new Student("郭富城",5); list.add(s1); list.add(s2); list.add(s3); System.out.println(s1); System.out.println(list); //2.删除 list.remove(1); System.out.println(list); //3.遍历 //for for (int i = 0;i<list.size();i++){ System.out.println(list.get(i)); } System.out.println("================="); //增强for for (Object object:list) { Student s = (Student) object; System.out.println(s); } //使用迭代器 Iterator iterator = list.iterator(); while (iterator.hasNext()) { Student s = (Student) iterator.next(); System.out.println(s); } //4.判断 System.out.println(list.contains(s1)); System.out.println(list.isEmpty()); //5.获取 System.out.println(list.indexOf(s1)); } }
!ArrayList和LinkedList的区别
(1、1.2 )
ArrayList : 是数组,空间连续、有角标、查询快、增删慢。
LinkedList : 是一个双向链表,Node、有first和Last,具有方向的一个链表,查询慢,增删快