容器Collection
Java面试的重头戏,Java里面所有的数据结构基本都与Collection有关
Java提供的容器Collection
Colection这个东西,是一个接口,是Java给我们在Java语言中,最常用的顶级容器接口
注:顶级接口就是在这个实现链上,他基本已经到了最高的一个接口了
容器:我们又有一个内容,容器的基本操作被分为求长、定位、替换
容器中包含一些个常用的方法,但是容器本身不包含角标的概念
容器的子接口,有LiSee、Set这些子接口部分包含角标概念,我们通过原码的阅读发现:
+List是Collection的子接口,包含角标概念;Java对于常用的List是会给出具体的实现方案的,也就是说,Java给出了List的实现类型;也就是说,如果我们需要使用List,那么直接调用List的实现类就行
ArrayList
底层的实现是用数组写的,顺序表
查找效率高;增删效率低
初始化格式
ArrayList<String> list = new ArrayList<>();
ArrayList<String> list1 = new ArrayList<>();
//add 增
list1.add("hjx");
list1.add("wrp");
list.add("yuxiansheng");
System.out.println(list.size());
list.add(0, "cxy");
list.addAll(list1);
//remove 删
System.out.println(list.remove("hjx"));
System.out.println(list.removeAll(list1));
//set 改
list.set(0, "yuxianseng");
list2.set(0, 5);
//indexOf 查第一个
//lastIndexOf 查最后一个
System.out.println(list2.indexOf(1));
System.out.println(list2.lastIndexOf(2));
//get 拿/输出第几个值
System.out.println(list.get(0));
//size 求长
System.out.println(list.size());
//retainAll
保留在1里面所有出现过的2的值
//subList 截取
System.out.println(list2.subList(0, list2.size()));
//扩容
不设置的其大小的时候默认为10;
在容量超出时每次增长1.5倍:
扩容后容量 = 扩容前容量 + 扩容前容量 / 2
LinkedList
底层的是实现是链表,没有容量的概念
增删效率高;查找效率低
具体内容与ArrayList一致
add 和
MyLinkedList<String> list = new MyLinkedList<>();
list.add("asd");
list.add("zxc");
list.add("asd");
list.add("zxc");
list.remove(1);
for(int i = 0;i<list.size();i++) {
System.out.println(list.get(i));
}
get() 增加
clear() 清理
remove 删除
size() 大小
栈Stack
方法
boolean empty()
测试栈是否为空
Object peek()
查看栈顶部的对象,但不从栈中移除它
Object pop()
查看栈顶部的对象,并且移除它
Object push(Object element)
把项目压入栈顶部*可以理解为增
int search (Object element)
返回对象在栈中的位置,以1为基数
set
//哈希算法簇
//哈希过程 可以正向推出哈希值,但是不能由哈希值推反推 例:数学运算
//哈希碰撞 哈希值相同的时候
//没有角标,只能用迭代器获取
//不能放重复的值,多个值只放进一个
//默认哈希无序,但不一定
//可以去重
HashSet
+无序,底层实现是HashMap
使用的是HashMap中的k,v为null
LinkedHashSet
+有序,按放进来的顺序取出去
TreeSet
+字典序升序排序输出 放进来的值必须有可比较的能力,否则会报错