Java集合——单列集合Collection、双列集合Map

先来简单介绍一下集合吧。

      我们平时想要对多个数据进行操作,初学时可能会想到使用数组来存储数据,这是没错的,但是数组的使用有时候很不便。Java中给了我们可以方便存储对象、对多个对象操作的容器--集合,集合的出现就是为了持有对象。集合中可以存储任意类型的对象,而且长度可变。在程序中有可能无法预先知道需要多少个对象,那么用数组来装的话就可能不知道长度要定义多少,而集合正解决了这样的问题。有一个要注意的问题是,集合中存放的都是对象的引用而非对象本身。

 

集合的分类又有那些呢?

Java对不同的容器进行了定义,虽然容器不同,但是还是有一些共性可以抽取,最后抽取了一个顶层接口,那么就形成了一个集合框架。如何学习呢?当然是从顶层学起,顶层里边具有最共性,最基本的行为。具体的使用,就要选择具体的容器了。为什么? 因为不断向上抽取的东西有可能是不能创建对象的,抽象的可能性很大,并且子类对象的方法更多一些. 所以是看顶层,创建底层。那么集合的顶层是什么呢 叫做Collection。

---|Collection: 单列集合
---|List: 有存储顺序, 可重复
    ---|ArrayList: 数组实现, 查找快, 增删慢
            由于是数组实现, 在增和删的时候会牵扯到数组
            增容, 以及拷贝元素. 所以慢。数组是可以直接按索引查找, 所以查找时较快

 

    ---|LinkedList: 链表实现, 增删快, 查找慢
            由于链表实现, 增加时只要让前一个元素记住自
                己就可以, 删除时让前一个元素记住后一个元
                素, 后一个元素记住前一个元素. 这样增删效
                率较高但查询时需要一个一个的遍历, 所以效率较低

 

    ---|Vector: 和ArrayList原理相同, 但线程安全, 效率略低
    和ArrayList实现方式相同, 但考虑了线程安全问题, 所以效率略低

 

---|Set: 无存储顺序, 不可重复

 

---|HashSet:  底层数据结构是一个哈希表通过hashcode()
                    和equals()来保证元素的唯一性
                    线程不安全 存取速度快

---|TreeSet:  底层数据结构是一个红黑树 默认对元素进行自然排序,如果在比较的时候两个对象返回值为0,那么元素重复 

---|LinkedHashSet

Collection接口有两个子接口:List(链表|线性表),set(集),其中的特点是List可以存放重复元素,元素是有序的,而Set不可以存放重复元素,元素存取是无序的。

Collection接口的共性方法无非也是增删改查:

增加:
1:add() 将指定对象存储到容器中
                      add 方法的参数类型是Object 便于接收任意对象
2:addAll() 将指定集合中的元素添加到调用该方法和集合中
删除:
3:remove() 将指定的对象从集合中删除
4:removeAll() 将指定集合中的元素删除
修改
5:clear() 清空集合中的所有元素
判断
6:isEmpty() 判断集合是否为空
7:contains() 判断集合何中是否包含指定对象
            
8:containsAll() 判断集合中是否包含指定集合
                            使用equals()判断两个对象是否相等  
获取:   9:int size()    返回集合容器的大小


转成数组10: toArray()   集合转换数组

 

 

---| Map 双列集合: 键值对 key-value
---|HashMap    采用哈希表实现,所以无序
---|TreeMap    可以对健进行排序
---|HashTable   底层是哈希表数据结构,线程是同步的(线程安全),不可以存入null键,null值。 效率较低,被HashMap 替代

 

---|LinkedHashMap    

再来说说Map集合。

Map中的元素是两个对象,一个是键,一个是值。键不能重复,值可以重复

1、添加:
1、V put(K key, V value)    (可以相同的key值,但是添加的value值会覆

盖前面的,返回值是前一个,如果没有就返回null)                                          

 

2、putAll(Map<? extends K,? extends V> m)  从指定映射中将所有映射关系复制到此映射中(可选操作)。

 

2、删除

 

1、V remove(Object key)    删除关联对象,指定key对象

 

2、clear()     清空集合对象
3、获取
        1、 V get(Object key); 可以用于判断键是否存在的情况。当指定的键不存在的时候,返回的是null。

        2、Set<K> keySet():获取集合中所有键的集合

        3、Collection<V> values():获取集合中所有值的集合

 

 

4、判断:
1、boolean isEmpty()   长度为0返回true否则false
        2、boolean containsKey(Object key)  判断集合中是否包含指定的key
        3、boolean containsValue(Object value)  判断集合中是否包含指定的value
5、长度:
        int size()返回集合中的键值对的数

 

 

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值