1、匿名内部类:放在类中间的类,没有名字,其作用是可以少创建一个class文件,减少代码量。

特点:1、类的声明和实例同时产生。
2、范围局限在方法的内部。
示例:

  1. class A{
  2. publicstaticvoid main(String[] args){
  3. ArrayList books =newArrayList();
  4. //此处省略了大量的add方法
  5. /使用匿名内部类,完成对集合的遍历/
  6. books.forEach(newConsumer(){
  7. @Override
  8. publicvoid accept(BookEntity t){
  9. // TODO Auto-generated method stub
  10. System.out.println(t);
  11. }
  12. });
  13. }
  14. }

    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

  1. datas.forEach(newBiConsumer(){
  2. @Override
  3. publicvoid accept(Boy t,Girl u){
  4. // TODO Auto-generated method stub
  5. System.out.println(“key=”+ t);
  6. System.out.println(“value=”+ u);
  7. }
  8. });

    2、通过key的集合获得值

  9. Set keys = datas.keySet();

  10. for(Boy boy : keys){
  11. System.out.println(“key=”+ boy);
  12. System.out.println(“value=”+ datas.get(boy));
  13. }

    3、通过Set集合获取

  14. Set> set = datas.entrySet();

  15. for(Entry entry : set){
  16. System.out.println(entry.getKey());
  17. System.out.println(entry.getValue());
  18. }

    JDK1.7底层原理是:数组+单向链表

    JDK1.8底层原理是:数组+单向链表+红黑树

    11.25Java学习总结 - 图3

    11.25Java学习总结 - 图4