- 集合框架
1.1 目录
1. 为什么使用集合?
2. 集合架构有哪些?
3. List集合
4. ArrayList集合
5. LinkedList集合。
6. Set集合
7. HashSet集合
8. TreeSet集合。
9. Map
10.HashMap集合。
11.TreeMap集合。
1.2 为什么使用集合?
1. 我们原来讲过数组.
思考: 数组有缺陷?--定容【一定数组定义好,他们得长度就无法改变.】如果需要改变数组得长度,变得很复杂。
数组的缺陷:定长,想要改变一场繁琐——进而演化手撕可变长度的容器。
2.我们是否可以定义一个长度改变的容器。---当然可以。
3.手撕可变长度的容器。
package com.ykq;
import java.util.Arrays;
public class MyArray {
private Object [] arr; //声明一个Object类型的数组
private int size;//表示数组的下标 因为他们是类成员变量 在创建对象时都有默认值。
public MyArray(){ //无参构造函数
this(3); //本类中其他的构造函数 this本类的对象。 如果在构造方法中this()表示调用本类的其他构造函数
}
public MyArray(int initSize){ //有参构造函数--表示数组的长度
if(initSize<0){ //长度不合法
throw new RuntimeException("sorry 数组的长度有误。");
}
arr=new Object[initSize];
}
//把元素o放入数组arr
public void addData(Object o){
//判断你的数组是否已满
if(size>=arr.length){
//扩容--(1)容器的长度变长 (2)把原来容器中的元素复制到新的容器中
Object[] newArr = Arrays.copyOf(arr, size * 2);
arr=newArr;
}
arr[size]=o;
size++;
}
//根据下标获取数组中的元素。
public Object getData(int index){
if(index>=size){
throw new ArrayIndexOutOfBoundsException("下标越界");
}
Object o = arr[index];
return o;
}
}
我们自己可以手写一个可变的容器,那么别人也可以手写可变的容器。
java官网 基于数组 根据不同的数据结构 创建了多个类 而这些类统称 为集合框架。
以后 我们在说集合框架时 就表示多个类。
1.3 集合的架构
1.4 List集合-ArrayList
1.4.0 创建集合对象
List list = new ArrayList(); //创建一个集合对象 如果没有指定集合容器的长度默认为10
List list1 = new ArrayList(15);
1.4.1 添加的操作
//添加 (1)可以添加任意类型
list.add("java01");
list.add("java02");
list.add(15.5);
list.add(18);
list.add(true);
list.add(new Date());
System.out.println(list);
list.add(2,"hello"); //下标为2的位置添加元素 并把后面的元素进行唯一
System.out.println(list); //打印一个对象时默认调用的为toString()
List list2=new ArrayList();
list2.add("a");
list2.add("b");
list.addAll(list2);//添加多个元素 把list2中的每个元素一一添加到list中
System.out.println(list);
1.4.2 删除的操作
//删除操作
list.remove(2);//移除下标为2的元素
System.out.println(list);
list.clear();//清空集合中的元素.
System.out.println(list);
1.4.3 修改的操作
//修改操作
list.set(1,"刘德华");
System.out.println(list);
1.4.4 查询操作
List list = new ArrayList();
list.add("java01");
list.add("java02");
list.add("java03");
list.add("java02");
//查询的方法
//根据下标获取元素
Object o = list.get(1);
System.out.println(o);
//获取集合中元素的个数。
int size = list.size();
System.out.println(size);
//判断元素是否在集合中
boolean f = list.contains("java05");
System.out.println(f);
//查询元素在集合中第一次出现的位置
int index = list.indexOf("java05");
System.out.println(index);
//遍历集合中的元素 for循环
for(int i=0;i<list.size();i++){
Object o1 = list.get(i);
System.out.println(o1);
}
1.4.5 ArrayList底层源码
1.5 LinkedList
它是一个链表结构。
1.5.1 添加
//添加
linkedList.add("java01"); //追加尾部
linkedList.addFirst("java02"); //添加到头部
linkedList.addLast("java03");//追加到尾部
linkedList.addFirst("java04"); //追加到头部
linkedList.addLast("java05");//追加到尾部
System.out.println(linkedList);
1.5.2 删除操作
//删除操作
linkedList.removeFirst();//移除头部元素
System.out.println(linkedList);
linkedList.remove(2);//移除指定位置的元素
System.out.println(linkedList);
linkedList.removeLast();//移除尾部的元素
System.out.println(linkedList);
1.5.3 修改操作
//修改操作
linkedList.set(1,"java11");
System.out.println(linkedList);
1.5.4 查询操作
//查询操作
int size = linkedList.size();//求长度
boolean empty = linkedList.isEmpty();//是否为空
boolean b = linkedList.contains("java01");//判断元素是否在集合中
Object o = linkedList.get(1);//根据下标获取指定位置的元素
Object first = linkedList.getFirst();//获取第一个元素
System.out.println(first);
Object last = linkedList.getLast();
System.out.println(last);