第一部分:基础知识
Collection:
List:arraylist linkedlist vector
Set:hashset treeset
Arraylist底层数据结构为数组,在元素较多时候查询快速,删除添加动作慢
linkedlistt底层数据结构为链表,在元素较多时候查询较慢,删除添加动作快
集合框架:为什么会出现那么多的容器呢?
因为每一个容器对数据的存储方式不同,这个存储方式叫数据结构
什么是迭代器:
其实就是集合的取出元素的方式
List 元素是有序的 并且可以重复 因为该集合体系有索引
Set 元素无序 并且没有索引
List 凡是可以操作角标的都是list专有方法
增添
add(index,element)
addAll(index,collection)
删除
remove(index)
修改
set(index,element)
查找
get(index)
sublist(from,to)
除此之外,当用集合和迭代器两种方法操作同一组元素时候,会引起并发操作异常 Iterator的子接口listIterator可以避免这以问题,
listIterator实现的方法比父类多,如果判断取出删处以外的操作,需要用listIterator迭代器
Linkedlist特有方法:
addFirst(); //头部插入元素
addLast() ; //尾部插入元素
getFirst();//头部取出元素,长度不变
getLast();//尾部取出元素,长度不变
removeFist() ;//头部移除元素,长度改变
removeLast();//尾部移除元素,长度改变
set:元素无序(存入和取出的顺序不一样),元素不可以重复
hashset底层数据结构为哈希表,线程是同步的,
存入数据时候 先检测哈希值是否一样(通过hashCode()方法返回地址比较) 如果一样 则比较对象是否一样(通过equal()方法比较)
equal方法可以通过自己的需要改写
Treeset底层数据结构是哈希表 可以对元素排序
代码实现:
import java.util.*;
/*1.add方法中存放的是类型是Object类,以便于接受任意类型对象
*2.集合存储的都是对象的引用
*/
class Collection
{
public static void method()
{
ArrayList a = new ArrayList();
//添加元素
a.add(1,"java1");
a.add(2,"java2");
a.add(3,"java3");
a.add(4,"java4");
//取出元素
Iterator t = a.iterator();
while(t.hasNext())
{
sop(t.next());
}
//删除元素 在角标为2 处删除元素
a.remove(2);
//修改元素 在角标为3 的位置修改
a.set(3, "andorid");
//查找元素 查询角标为3 的位置的元素
sop(a.get(3));
//获取所有元素
while(t.hasNext())
{
sop(t.next());
}
//通过indexOf获取对象的位置
sop(a.indexOf("java01"));//打印java01角标
List sub = a.subList(1,2);//获取子窜
sop(sub); //打印子串
}
public static void main(String[] args)
{
method();
}
public static void sop(Object obj)
{
System.out.println(obj);
}
}