1.集合的概述
2.Collection
3.List
4.Vertor
5.Stack
6.ArrayList
7.LinkedList
8.Set
9.HashSet
10.TreeSet
11.泛型
12.Map
13.HashMap
14.Hashtable
15.TreeMap
16.LinkedHashMap
一、集合的概述
1.集合的概念
集合有时候也称为容器,它可以将系列元素组合成一个单元,用于存储、提取、管理数据。
集合是存储对象最常用的一种方式。
集合可以存储任意类型的对象,而且长度可变。在程序中有可能无法预知先知道多少个对象,那么用数组来装对象的话,长度不好定义,而集合解决了这样的问题。
2.集合和数组的比较
相同点:数组和集合类都是存储数据的容器
不同点:
1.存储内容不同
数组既可以存放基本数据类型,也可以存放引用数据类型;集合只能存储引用数据类型,如果要存放基本数据类型,封装成包装类。
数组只能存储定义的数据类型;集合可以存储多种的类型
2.存储数量不同
数组的长度是不可变的,一旦大小确定就无法增删;集合的长度是可变的,是一个可以伸缩的容器
3.方法不同
数组中只有Object中定义的方法以及一个length属性;集合中有太多太多的方法。
集合类的特点:用于存储对象,长度是可变的,可以存储不同类型的对象
3.集合家族
集合的的分类:
单列集合:每个元素都是一个单独的个体 value
双列集合:每个操作都是针对一对数据进行操作,一对数据作为一个单位。Key--value
单列集合的体系
Collection:单列集合的顶层接口
|--List:有序的子接口
|--ArrayList:数组、顺序存储
|--LinkedList:链表、链式存储
|--Vector:被Arraylist取代
|--Set:无序的子接口
|--HashSet:哈希存储
|--TreeSet:二叉树存储
双列集合的体系
Map:双列集合的顶层接口
|--HashMap:哈希存储
|--TreeMap:二叉树存储
二、Collection
1.概述
单列集合的顶层接口。接口不能创建对象,随便找个一个子类已实现的对象,调用接口的方法。
学习Collection中的共性方法,多个容器在不断向上抽取就出现了该体系。发现Collection接口中具有容器具有的共性方法。查阅API时,就可以直接看该接口中的方法。并创建其子类对象对集合进行基本应用。当要使用集合对象中特有的方法,查看子类具体内容。
2.常用方法
boolean |
add(E e) 确保此集合包含指定的元素(可选操作)。 |
||
boolean |
remove(Object o) 从该集合中删除指定元素的单个实例(如果存在)(可选操作)。 |
||
void |
clear() 从此集合中删除所有元素(可选操作)。 |
||
boolean |
isEmpty() 如果此集合不包含元素,则返回 true 。 |
||
boolean |
contains(Object o) 如果此集合包含指定的元素,则返回 true 。 |
||
int |
size() 返回此集合中的元素数。 |
代码示例
import java.util.ArrayList;
import java.util.Collection;
class Test1 {
public static void main(String[] args) {
Collection c = new ArrayList();
//添加
c.add(111);
c.add("222");
c.add("abc");
c.add("zxc");
System.out.println(c);//[111, 222, abc, zxc]
//删除
c.remove(111);
System.out.println(c);//[222, abc, zxc]
//元素个数
System.out.println(c.size());//3
//判断是否为空
System.out.println(c.isEmpty());//false
//判断是否包含该元素
System.out.println(c.contains("zxc"));//true
//清空所有元素
System.out.println(c.clear());
System.out.println(c.isEmpty());//true
}
}
boolean |
addAll(Collection<? extends E> c) 将指定集合中的所有元素添加到此集合(可选操作)。 |
|
boolean |
containsAll(Collection<?> c) 如果此集合包含指定 集合中的所有元素,则返回true。 |
|
boolean |
removeAll(Collection<?> c) 删除指定集合中包含的所有此集合的元素(可选操作)。 |
|
boolean |
retainAll(Collection<?> c) 仅保留此集合中包含在指定集合中的元素(可选操作)。 |
代码示例
import java.util.ArrayList;
import java.util.Collection;
class Test1 {
public static void main(String[] args) {
Collection c1 = new ArrayList();
c1.add("123");
c1.add("abc");
c1.add(120);
c1.add("aaa");
c1.add("bbb");
c1.add("ccc");
System.out.println(c1);//[123, abc, 120, aaa, bbb, ccc]
//将集合2中的元素全部添加到集合1中
Collection c2 = new ArrayList();
c2.add("111");
c2.add("222");
c2.add("333");
c1.addAll(c2);
System.out.println(c1);//[123, abc, 120, aaa, bbb, ccc, 111, 222, 333]
//判断一个集合1是否包含集合3中的所有数据
Collection c3 = new ArrayList();
c3.add("123");
c3.add("abc");
System.out.println(c1.containsAll(c3));//true
//删除集合1中包含集合3中的所有元素
System.out.println(c1);//[123, abc, 120, aaa, bbb, ccc, 111, 222, 333]
c1.removeAll(c3);
System.out.println(c3);//[123, abc]
System.out.println(c1);//[120, aaa, bbb, ccc, 111, 222, 333]
//仅保留集合1中包含集合2中的元素
System.out.println(c2);//[111, 222, 333]
c1.retainAll(c2);
System.out.println(c1);//[111, 222, 333]
}
}
3.自定义类的对象在集合中的操作
练习:定义一个Person类,完成在Collection中的增删改查操作。
import java.util.ArrayList;
import java.util.Collection;
class Test1 {
public static void main(String[] args) {
Collection c = new ArrayList();
Person p1 = new Person(1,"小一",11);
Person p2 = new Person(2,"小二",22);
Person p3 = new Person(3,"小三",33);
c.add(p1);
c.add(p2);
c.add(p3);
System.out.println(c);//[id:1,name:小一,age:11, id:2,name:小二,age:22, id:3,name:小三,age:33]
c.remove(p3);
System.out.println(c);//[id:1,name:小一,age:11, id:2,name:小二,age:22]
System.out.println(c.size());//2
c.clear();
System.out.println(c.size());//0
}
}
class Person{
private int id;
private String name;
private int age;
public Person(){
}
public Person(int id, String name, int age) {
super();
this.id = id;
this.name = name;
this.age = age;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
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;
}
public String toString(){
return "id:"+id+",name:"+name+",age:"+age;
}
}
4.遍历
(1)集合转成数组,然后再对数组进行遍历。
代码示例
import java.util.ArrayList;
import java.util.Collection;
public class Test1 {
public static void main(String[] args) {
Collection c = new ArrayList();
c.add(new Person("小一",11));
c.add(new Person("小二",22));
c.add(new Person("小三",33));
c.add(new Person("小四",44));
c.add(new Person("小五",55));
Object[] obj = c.toArray();
for(int i=0;i<obj.length;i++){
Person p = (Person)obj[i];
System.out.println(p);
}
}
}
class Person {
private String name;
private int age;
public Person() {
super();
}
public Person(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 String toString() {
return "Person [name=" + name + ", age=" + age + "]";
}
}
(2)使用迭代器
Iterator<E> |
iterator() 返回此集合中的元素的迭代器。 |
|
boolean |
hasNext() 如果迭代具有更多元素,则返回 true 。 |
|
E |
next() 返回迭代中的下一个元素。 |
注:hasNext判断是否有下一个元素;next获取下一个元素,还会移动迭代器的位置。
代码示例
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class Test1 {
public static void main(String[] args) {
Collection c = new ArrayList();
c.add(new Person("小一",11));
c.add(new Person("小二",22));
c.add(new Person("小三",33));
c.add(new Person("小四",44));
c.add(new Person("小五",55));
Iterator iterator = c.iterator();//获取迭代器
//System.out.println(iterator.hasNext());//true
//System.out.println(iterator.next());//Person [name=小一, age=11]
while(iterator.hasNext()){
Person p = (Person)iterator.next();
System.out.println(p);
}
}
}
class Person {
private String name;
private int age;
public Person() {
super();
}
public Person(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 String toString() {
return "Person [name=" + name + ", age=" + age + "]";
}
}
(3)高级for循环底层就是迭代器。
代码示例
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class Test1 {
public static void main(String[] args) {
Collection c = new ArrayList();
c.add(new Person("小一",11));
c.add(new Person("小二",22));
c.add(new Person("小三",33));
c.add(new Person("小四",44));
c.add(new Person("小五",55));
Object[] objs = c.toArray();
for(Object obj : objs){
Person p = (Person) obj;
System.out.println(p);
}
}
}
class Person {
private String name;
private int age;
public Person() {
super();
}
public Person(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 String toString() {
return "Person [name=" + name + ", age=" + age + "]";
}
}
5.Collections-扩展
static <T> void |
fill(List<? super T> list, T obj) 用指定的元素代替指定列表的所有元素。 |
|||
static <T> int |