- 1、匿名内部类:放在类中间的类,没有名字,其作用是可以少创建一个class文件,减少代码量。
- LinkList和ArrayList的区别:LinkList是链表结构(双向列表),ArrayList是数组结构,两者的API方法等同。ArrayList比较适合查询,但是新增和删除节点比较慢,效率不好。LinkList适合新增,删除节点,但是查询效率慢。
- vetor:一种非常古老的集合,底层和arraylist方法一样,synchronized,API方法和ArrayList方法一样。
- HashSet:使用场景:ArrayList可以存放重复元素,如果需要去重,就可以使用HashSet ,去重需要重写hashcode和equals两个方法。
- 特点:1.可以有序也可以无序,
- 2、不允许存放重复元素,
- 3、没有下标,不能通过下标来获取元素,不可以使用for循环
- 4、HashSet只是Set的一种实现而已,底层采用Hash表
- TreeSet:二叉结构,红黑二叉树作用:为了提高查询效率。 API 用法等同于HashSet。去重原理:不是依靠hashcode和equals,依靠的是比较器implements(comparable)
- 特点:节点是红或者黑,根节点是黑色,上下节点异色,任意子节点到根节点的黑色节点数相同。
- LinkHashSet(双向的链表):用法和HashSet的用法一样,无序,不能存放重复元素,没下标。区别是:HashSet底层是HashMap的键,LinkHashSet的底层是LinkedHashMap的键
- HashMap:HashMap只是Map的一种实现,Map是一种key-Value的结构,key不可以重复,value可以重复
- key可以理解是Set集合,Value理解为Collection集合
- HashMap中允许放null值,Key-Value键值对,存储元素无序,replae和put都可以实现修改元素的效果,使用replae的话,key一定要存在,不存在就修改不了。
- 去重原理:依靠hashcode和equals
- 遍历有三种方式:1、使用匿名内部类foreach
- 2、通过key的集合获得值
- 3、通过Set集合获取
- JDK1.7底层原理是:数组+单向链表
- JDK1.8底层原理是:数组+单向链表+红黑树
- ">
- ">
1、匿名内部类:放在类中间的类,没有名字,其作用是可以少创建一个class文件,减少代码量。
特点:1、类的声明和实例同时产生。
2、范围局限在方法的内部。
示例:
- class A{
- publicstaticvoid main(String[] args){
- ArrayList
books =newArrayList (); - //此处省略了大量的add方法
- /使用匿名内部类,完成对集合的遍历/
- books.forEach(newConsumer
(){ - @Override
- publicvoid accept(BookEntity t){
- // TODO Auto-generated method stub
- System.out.println(t);
- }
- });
- }
- }
LinkList和ArrayList的区别:LinkList是链表结构(双向列表),ArrayList是数组结构,两者的API方法等同。ArrayList比较适合查询,但是新增和删除节点比较慢,效率不好。LinkList适合新增,删除节点,但是查询效率慢。
vetor:一种非常古老的集合,底层和arraylist方法一样,synchronized,API方法和ArrayList方法一样。
HashSet:使用场景:ArrayList可以存放重复元素,如果需要去重,就可以使用HashSet ,去重需要重写hashcode和equals两个方法。
特点:1.可以有序也可以无序,
2、不允许存放重复元素,
3、没有下标,不能通过下标来获取元素,不可以使用for循环
4、HashSet只是Set的一种实现而已,底层采用Hash表
TreeSet:二叉结构,红黑二叉树作用:为了提高查询效率。 API 用法等同于HashSet。去重原理:不是依靠hashcode和equals,依靠的是比较器implements(comparable)
特点:节点是红或者黑,根节点是黑色,上下节点异色,任意子节点到根节点的黑色节点数相同。
LinkHashSet(双向的链表):用法和HashSet的用法一样,无序,不能存放重复元素,没下标。区别是:HashSet底层是HashMap的键,LinkHashSet的底层是LinkedHashMap的键
HashMap:HashMap只是Map的一种实现,Map是一种key-Value的结构,key不可以重复,value可以重复
key可以理解是Set集合,Value理解为Collection集合
HashMap中允许放null值,Key-Value键值对,存储元素无序,replae和put都可以实现修改元素的效果,使用replae的话,key一定要存在,不存在就修改不了。
去重原理:依靠hashcode和equals
遍历有三种方式:1、使用匿名内部类foreach
- datas.forEach(newBiConsumer
(){ - @Override
- publicvoid accept(Boy t,Girl u){
- // TODO Auto-generated method stub
- System.out.println(“key=”+ t);
- System.out.println(“value=”+ u);
- }
-
2、通过key的集合获得值
Set
keys = datas.keySet(); - for(Boy boy : keys){
- System.out.println(“key=”+ boy);
- System.out.println(“value=”+ datas.get(boy));
-
3、通过Set集合获取
Set
> set = datas.entrySet(); - for(Entry
entry : set){ - System.out.println(entry.getKey());
- System.out.println(entry.getValue());
- }
JDK1.7底层原理是:数组+单向链表
JDK1.8底层原理是:数组+单向链表+红黑树