对象数组:
里面的元素其实都是对象的地址
int[] arr = {1,2,3,4}
String[] arr = {"abc","d"}
数组和集合的区别:
1、长度:数组固定长度,集合可以随着元素的个数,来变化自己的长度
2、元素类型:数组可以存储基本数据类型和引用数据类型,
集合只能存储引用数据类型
集合的体系结构:
Collection
List 有序、有索引、可以重复
ArrayList 数组
LinkedList 链表
Vector 数组
Set 无序、没有索引、不可以重复
HashSet
TreeSet
Collection基本功能:
1、add 返回值类型
如果添加成功就返回true,ArrayList添加的时候总是成功,所以都是返回true
如果添加失败就返回false
2、toString,直接打印了集合中的内容,所以我们知道,是重写了toString方法
3、remove删除的是第一次的这个元素
4、clear();
5、判断是否为空isEmpty();
6、size(),判断集合中的元素的个数
7、 黄线,是一个警告,不影响编译和运行,只是一个提示
如果一个地方出现了警告,那么整个文件、包、src文件夹、和项目都会出现警告
带All的方法:
1、c.addAll(c1);
2、c.removeAll(c1);
3、c.containsAll(c1);
4、c.retainAll(c1);
迭代器:
Iterator it = c.iterator()获取到迭代器对象
while(it.hasNext()){
it.next()
}
List的特有方法:
1、add(index, ele),指定索引的时候index<=size
2、remove(index),不会自动装箱,所以如果存储的是包装类型,就没有办法直接删除对象
连续删除相邻位置,需要注意,在删除某个元素之后,其他元素的索引发生了变化
3、get(index)
可以配合size方法来进行集合的遍历
4、set(index,ele)设置指定位置上的元素
并发修改异常:
ConcurrentModificationException
产生的原因:在使用迭代器来进行遍历的同时,还使用集合对象来进行修改
解决:只使用一个对象来进行操作
而Iterator没有add方法,因此,使用其子接口:ListIterator来进行遍历和添加
Vector:
1、1.0版本出现,之后不被重用
2、 Enumeration en = v.elements();
en.hasMoreElements();
en.nextElement();
数组和链表的数据结构:
数组: 查询快修改快(原因:就是通过计算,一次找到相应的元素) int[] arr = new int[]{1,2,3,4,5,6,7,8}
增删慢
链表: 查询慢修改慢
增删快 要增加的位置左右两端的节点的next和pre修改一下就行,其余元素都不需要修改
List三个子类的特点和区别:
1、 Vector ArrayList LinkedList
2、 Vector和ArrayList都是数组实现,Vector是线程安全的,效率低
ArrayList是线程不安全的,效率高,增删慢,查询修改快
LinkedList底层是链表,线程不安全,效率高,增删快,查询修改慢
|
|