zoukankan      html  css  js  c++  java
  • java基础集合!

    1.何为集合?:

    java中为了方便存储对象。就产生了集合。

    所以集合只用于存储对象。集合的长度是可以变化的。也可以去存储不同的对象。这里要注意的是:

    	List<Integer> list = new ArrayList<Integer>();
    
    	list.add(3);

    这里其实是java中自动进行了装箱操作。将int类型的3装箱成Integer类型的。在取出来的时候又自动拆箱。

    2.集合分类:

     在java中一类集合直接存储对象,则是去实现Collection.

    另一类集合根据映射关系实现Map接口,具有键值对关系。两类接口共同组成了JAVA中的集合。

    3.Collection

    Collection能让你去操作对象组,它是位于类集层次的最顶层。它根据是否允许元素的重复,分了两大类。Set集合和List集合。

       List 主要去处理序列(对象的列表),其中允许对象的重复。如ArrayList,LinkedList和 Vector是三个主要实现类。

       Set 主要去处理集合,集合必须包含唯一元素。

       其中还有一个比较重要,SortedSet 扩展了Set 集合去处理排序集合。
    4.Map集合:

    Map是一个存储关键字和值的关联或者说是键值对的对象。可以去通过一个关键字来得到它的值。关键字的值都是对象。

    但是要注意的是:关键字(key)必须唯一,不能重复,但是值(value)可以重复。但是在HashTableHashMap中的值可以为null.而在HashMap则是不可以的。

    5.集合的线程安全问题:

    Vector和HashTable是线程同步(synchronized)。ArrayList 和 HashMap则是线程不同步的。

    这样就导致了前者的安全性好,而效率不高。后者的效率高但是安全性不好。这样就要线程不要求安全的时候用后者,否则用前者。

    6.equal()和hashCode()

    关于hashCode只有hashSet,hashMap等才会用到。对于ArrayList等不会用到。

    对于hashSet之类的集合,每个对象要放入到集合中,在这之前,会去先根据自身的属性,计算出一个hashCode值.当然这个hashCode方法是可以去选择重载的。

    然后再去找到在内存中hashCode值相同的区域,调用equal()方法比较有没有相同的对象,如果没有就存入集合中,如果存在对象,就不存入集合。

    这里要注意的就是只有当存在hashCode值相同的时候才会去调用equals 方法。否则是不调用的。

    还有一点在注意:

    当一个对象被存入hashSet中后,就不能修改这个对象的那些个参与计算机哈希值的字段了。否则,对象修改后的哈希值与最初存储进hashSet集合中的hashCode值不同了。

    在这样的情况下,技术在contains方法使用该对象的当前引用作为的参数去HashSet集合中检索对象,也找不到返回对象的结果。这就会导致会无法去HashSet集合中单独删除对象,从而造成内存泄露。

  • 相关阅读:
    Android网页打开指定App
    使用Android Studio Gradle实现友盟多渠道打包
    Android开发 PopupWindow弹窗调用第三方地图(百度,高德)实现导航功能
    Android使用Mob ShareSDK 分享不同平台
    Android布局优化之层级优化
    (Facebook开源项目)Fresco:一个新的Android图像处理类库
    关于Android开发的几点建议
    [AndroidTips]startService与bindService的区别
    基于HBase的手机数据备份系统 .
    MySQL在CenterOS和Ubuntu的安装
  • 原文地址:https://www.cnblogs.com/yangzhi/p/3576609.html
Copyright © 2011-2022 走看看