Java基础总结8---Java集合


Java集合大致可以分为Set、 List、 Queue 、Map 四种体系。

其中Set 代表无序,不可重复的集合;List 代表有序、重复的集合;Map 代表具有映射关系的集合,Queue代表一种队列集合实现。


使用Java 8 增强的Iterator 遍历集合元素

Iterator 接口也是Java集合框架的成员,Iterator 主要用于遍历(迭代访问)Collection集合中的元素,Iterator对象也被称为迭代器。

Iterator接口隐藏了各种Collection实现类的底层细节,向应用程序提供了遍历Collection集合元素的统一编程接口。Iterator接口定义了如下四个方法:

1、boolean hasNext();如果迭代器的元素还没有被遍历完,则返回true

2、Object next():返回集合里的下一个元素

3、void remove():删除集合里上一次next方法返回的元素。

4、void forEachRemaining(Consumer action):Java 8 新增

例如:

public static  void  main(String  【】 args){

      //创建集合、添加元素

        。。。。。。。。


       //获取books集合对应的迭代器

      Iterator it = books.iterator();

     while(it.hasNext()){

            //it.next() 方法返回的数据类型是Object类型,因此 需要强制类型转换

           String book = (String)it.next();

           System.out.println(book);

          if(book.equals("疯狂Java讲义")){

                 //从集合中删除上一次next()方法返回的元素

                  it.remove();

            }

             //对book变量进行赋值,不会改变集合元素本身

           book = “测试字符串”;

     }

     System.out.println(books);

}



Set 集合:

Set 集合不允许包含相同的元素,如果试图把两个相同的元素加入同一个set集合中,则添加操作失败,add()方法返回为false,且新元素不会被加入。

HashSet 具有以下特点:

     不能保证元素的排列顺序,顺序可能与添加顺序不同,顺序也有可能发生变化

    HashSet 不是同步的,如果多个线程同时访问一个HashSet,假设有两个或者两个以上的线程同时修改了HashSet 集合时,则必须通过代码来保证其同步。

    集合元素可以为null

HashSet 集合判断两个元素是否相等的标准是 两个对象通过equals()方法比较相等,并且两个对象的hashCode()方法返回值也相等。

当从HashSet中访问元素的时候,HashSet先计算出该元素的hashCode值,然后直接到该hashCode值对应的位置去取出该元素---这就是HashSet速度很快的原因。


LinkedHashSet

当遍历LinkedHashSet集合里的元素的时候,LinkedHashSet将会按元素的添加顺序来访问集合里的元素。

LinkedHashSet需要使用链表维护元素的插入顺序,因此性能略低于HashSet的性能。

TreeSet :只有当需要一个保持排序的Set时,才应该使用TreeSet,否则都应该使用HashSet。


List 集合:

List集合代表一个元素有序、可重复的集合,集合中每个元素都有其对应的顺序索引。List集合允许使用重复的元素,可以通过索引来访问指定位置的元素。

ArrayList  和 vector  后续 vector 被list替代。


Queue 队列


Map集合:

Map用于保存具有映射关系的数据,因此Map集合里保存着两组值,一组值用于保存Map里的Key,另外一组则用于保存Map里的value,key 和value 都可以是任何引用类型的数据。Map的key不允许重复。


HashMap 和HashTable

HashTable 是一个线程安全的Map实现,但HashMap是线程不安全的实现,所以HashMap比HashTable的性能高一点,但是如果多线程访问同一个Map的时候,使用HashTable实现类会更好。

HashTable不允许使用null作为key 和Value,如果试图把null值放进HashTable中会引发空指针异常,但HashMap可以使用null作为key或者value



各Map实现类的性能分析:

对于Map的常用实现类而言,虽然HashMap和HashTable的实现机制几乎一样,但由于HashTable是一个古老的、线程安全的集合,因此HashMap通常比HashTable要快。

TreeMap 通常比HashMap HashTable要慢,但使用TreeMap有一个好处,TreeMap 中的key-value对 总是处于有序的状态,无需专门进行排序操作。

对于一般的应用场景,程序应该多考虑使用HashMap,因为HashMap正是为了快速查询设计的(HashMap底层其实也是一个采用数组来存储key-value对)。但如果程序需要一个总是排好序的Map时,则考虑使用TreeMap。

LinkedHashMap比HashMap要慢,因为它需要维护链表来保持Map中的key-value时的添加顺序。


操作集合的工具类:Collections

该工具类提供了大量的方法对集合元素进行排序、查询和修改等操作,还提供了将集合对象设置为不可变、对集合对象实现同步控制等方法。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值