1.Collection 集合包括 list 和 set 集合
2. list集合:子类 ArrayList 底层数据结构是数组,查询快,增删慢,线程不安全,效率高
LinkedList 底层数据结构是链表,查询慢,增删快,线程不安全,效率高
特有功能:void addFirst() void addLast()等等
Vector 底层数据结构是数组,查询快,增删慢,线程安全,效率低,但一般不用
注意:list集合的 void add(int index,E element):在指定位置添加元素
E set(int index,E element) :在指定位置修改元素,返回被修改的元素
3. list集合特有功能:ListIterator<E> listIterator(); 此迭代器特有功能:boolean hasPrevious(); E Previous();可以实现集合的逆向遍历,但必须先正向遍历
//List集合遍历并修改元素
List<String> list=new ArrayList<String>();
//添加元素
list.add("Hello");
list.add("world");
list.add("java");
//注意不能迭代器遍历,集合修改元素,否则会发生并发修改异常ConcurrentModificationException
//遍历集合 1.迭代器遍历,迭代器修改元素
ListIterator<String> ls=list.listIterator();
while(ls.hasNext()){
if(ls.next().equals("world")){
ls.set("c++");
}
}
System.out.println(list);//[Hello, c++, java]
//2.集合遍历,集合修改
for(int x=0;x<list.size();x++){
if(list.get(x).equals("world")){
list.set(1,"c++");
}
}
System.out.println(list);//[Hello, c++, java]
4. 将一个数组转成一个list集合
/*把数组转换成集合
* String> List<String> java.util.Arrays.asList(String... arg0)
* 注意事项:可以把集合转换成数组,但必须注意数组的长度不能改变,
* (String... arg0) 本质是数组
List<String> list1 =Arrays.asList("Hello","java","123");
//list1.add("javaee");//UnsupportedOperationException
//list1.remove(1);//UnsupportedOperationException
list1.set(1, "world");
for(String s:list1){
System.out.println(s);
}
5. set集合和list集合的区别
set集合元素是唯一的,同时是无序的(即元素存储和遍历的时候,顺序可能不一样)
list集合元素可以重复,是有序的(即元素存储和遍历顺序一样)
6. set集合 :子类 hashSet 底层数据结构是哈希表,保证元素唯一性
LinkedHashset 底层数据结构是哈希表和链表,链表保证元素有序(即元素存储和遍历顺序一样)
TreeSet 底层数据结构是二叉树结构(红黑树是一种自平衡的二叉树结构),并且能够按照某种规则对元素进行排序
set集合的唯一性是依赖于hashCode()和equals()方法
7.TreeSet
A:自然排序 自定义对象的时候必须实现Comparable接口
存储:第一个为根节点 ,之后的元素按照(通过底层的Comparable()方法,大的(即返回值为正数)排在根节点的右边,小的(即返回值为负的)排在根节点的左边);
遍历:从根节点开始,按照左中右的顺序依次遍历
B:比较器排序
new TreeSet(Comparator<? super E> comparator) ; Comparator 是个接口,实际上要的是一个该接口的子类对象 所以一般用匿名内部类