Java集合框架总结

集合框架,体系{
      数组和集合
             数组使用有局限性
     不同集合适用不同的场景
     集合框架由接口和类共同组成    
}
Collection 集合{
       代表一个集合    定义了集合最基本的操作   没有直接的实现类
       但是有子接口  子接口有实现类  如 Set  List
}
Collection 中方法{
          应该有对容器操作的方法
  存  取   全取    单取   删   集合交并差
  addAll      removeAll       retainAll
  有序集合:添加顺序和取出顺序一致
  无序集合:添加顺序和取出顺序未必一致
  List是有序的
  Set是无序的
  无序的时候用hash方法  快
  有序用tree
}
集合的迭代{
           遍历整个集合需要使用迭代器
   jdk1.5以后提供了foreach方法来遍历集合
}
List{
             是集合的一个子接口
     List是一个有序 有下标 可重复的集合
     ArrayList       LinkedList         Vector     Stack


     存入集合的对象一般都重写hashCode和equals
     add(index,ele)
     indexOf    lastIndexOf
     set   get  subList   remove(index)
}
栈{
      栈是一种数据结构  描述的是一种先进后出的顺序
      Stack 是Vector的一个子类   描述了一个栈结构
      栈的方法  入栈 push   出栈 pop    peek看栈顶
      Deque是队列
}
List的实现类对比{
            ArrayList        LinkedList      Vector       Stack
    arrayList和linkedList的实现方式不一样
    arrayList使用数组进行实现      查找快 插入删除慢   需要一整块连续的空间
    linkedList使用链表进行实现       查找慢  插入快     无需连续空间
}
泛型{
         jdk1.5 有了泛型      参数化类型    <Integer>
传递了类型之后就可以明确类型
用<类型>的语法来使用泛型
     List<String> list=newArrayList<>();
         使用泛型   <传>
         定义泛型     
                 两部分  A   声明泛型   <E>  可以声明在类   方法  构造器
                  B  使用泛型   传入类型即可
           一个类继承或实现一个带泛型的父类或者接口需要传入泛型
   泛型是不能继承的   
   ?代表泛型的通配符
}
set集合{
          set集合 的特点是无下标   不可重复   无序
  set里的方法几乎和collection一致 
  Set 接口的常用实现类有  
  HashSet      LinkedHashSet    TreeSet
}
HashSet  {
           存  查效率非常高  可以和数组媲美
   通过hash算法进行存取
   hash算法:
       向hashSet中存入的元素  会调用该元素的hashcode方法获得一个hashcode值
       通过hashcode值计算存入集合的位置  判断集合中是否有值   再调用hashcode进行相同算法计算
       取相应位置查找即可
   问题:当元素个数超过数组长度时   hash冲突
           如何解决hash冲突?
        用链表的方法或者重hash的方法等等
           容积越大  发生hash冲突的概率越小
}
LinkedHashSet{
          LinkedHashSet 比 HashSet多了一个链表进行维护元素的顺序
  用链表来维护有序 但性能要低于HashSet
}
TreeSet{
       内部使用二叉树算法  实现了可排序的set集合
       有要求   存入TreeSet的元素  要么具备可比较性  要么提供比较器
       如果没有提供比较器  那么Treeet会调用元素的CompareTo方法进行比较  
       所以元素必须实现Comparable的接口 
}
String实现了可比较接口    规则是按照字典顺序进行比较   a~z  a在前 z在后
比较器{
         Comparator    叫比较器  优先级比可比较性高
TreeSet   有一个构造器   可以传入比较器
可以匿名创建内部类  节省类文件


区别compareTo和 compare   方法
区别 Comparable和 Comparator
     Comparable  叫可比较接口 放入TreeSet集合的元素应该实现该接口  元素具备自然顺序
     当不满足元素的自然顺序又不能修改时 如String     可以对TreeSet传入Comparator比较器
     用于指定比较规则
当元素有自然顺序  TreeSet又指定比较器时    比较器的优先级高
}
map{
        Map是一个顶级接口(无父接口) 
Map   描述了一种键值对的数据结构
Map中对值基本上没有要求 但对键有要求
Map的常用实现类 
HashMap    TreeMap      LinkedHashMap
}
Map{
        put(k,v)         向map中添加键值对       用于修改某个值         通过键取值
get(k)
remove(k)


提供一个map  所能获得的东西
键   值    键值对
//获得所有的键
    Set<k> s=map.keySet();
        syso(s);
    for(String k:s){
     
    }
//获得所有的值
   Collection<v> c=map.values();
        syso(c);
//获得所有的键值对
    Set<Entry<k,v>> e=map.entrySet();
    for(Entry<k,v> b:e){
System.out.println(b.getKey()+"***"+b.getValue());
    }
      containsKey 判断map中是否包含某个键
      containsValues 判断map中是否包含某个值


}
map的实现类{
        HashMap      LinkedHashMap       TreeMap  针对键而言
向hashmap中存入自定义的键值   重写hashcode和equals


LinkedHashMap  用链表维护了存入顺序
TreeMap    要求键   要么具备比较性  要么具备比较器


Hashtable  和 HashMap对比
table是古老的类  性能没有map好   hash运算的时候是取余运算符
                                                                           map是位运算
table 不能放null   HaspMap可以
table 线程安全  map不安全
}
两个工具类{
       Arrays   数组的工具类
       Collections     集合的工具类  
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值