Java基础-集合

集合

数组就是一个集合,集合实际上就是一个容器。

集合不能直接存储基本数据类型,另外集合也不能直接存储java对象,集合当中存储的都是java对象的内存地址。

在这里插入图片描述

Collection

Collection中的常用方法

Collection c = new ArrayList();

  1. boolean add(Object e) 想集合中添加元素

  2. int size() 获取集合中元素的个数

  3. void clear() 清空集合

  4. boolean contains(Object o) 判断当前集合中是否包含元素o

    contains方法在底层调用了equals方法进行必读

    Collection c = new ArrayList();
    String s1 = new String("abc");
    c.add(s1);
    String s2 = new String("def");
    c.add(s2);
    String x = new String("abc");
    System.out.println(c.contains(x));  //true
    
  5. boolean remove(Object o) 删除集合中的某个元素

    底层也调用了equals方法

  6. boolean isEmpty() 判断集合是否为空

  7. Object toArray() 将集合转换为数组

Iterator

Collection c = new ArrayList();
c.add("abc");
c.add(100);
c.add(new Object());
//1.获取集合对象的迭代器对象Iterator
Iterator it = c.iterator();
//2.通过以上获取的迭代器对象开始迭代/遍历集合
/*
boolean hasNext()  如果仍有元素可以迭代,则返回true
Object next()	  返回迭代的下一个元素
*/
while(it.hasNext()) {
    Object obj = it.next();
    System.out.println(obj);
}

当集合中的元素变动需要重新获取迭代器

在迭代元素的过程中,一定要使用迭代器Iterator的romove方法删除元素,不能使用集合自带的remove方法删除

List

存储元素的特点:有序可重复

List中特有的常用方法
  1. void add(int index, Object element)

    在列表指定位置插入元素

  2. Object get(int index)

    根据下标获取元素

  3. int indexOf(Object o)

    获取指定对象第一次出现处的索引

  4. int lastIndexOf(Object o)

    获取指定对象最后一次出现处的索引

  5. Object remove(int index)

    删除指定下标位置的元素

  6. Object set(int index, Object element)

    修改指定位置元素

ArrayList

ArrayList集合底层是Object数组,是非线程安全的

初始化容量是10(底层先创建一个长度为0的数组,当添加第一个元素的时候初始化容量10)

扩容是扩容到原容量的1.5倍,建议给定一个预估的初始化容量,减少数组的扩容次数,这是ArrayList集合比较重要的优化策略

检索效率比较高,随机增删效率比较低,另外数组无法存储大数据量(很难找到一块非常大的内存空间)

LinkedList

LinkedList集合底层采用了双向链表数据结构

链表优点:由于链表上的元素在空间存储上内存地址不连续,所以随机增删元素的时候不会有大量有大量元素移动,因此随机增删效率较高。

链表缺点:不能通过数学表达式计算被查找的元素的内存地址,每一次查找都是从头节点开始遍历,直到找到为止。

Set

HashSet

无序不可重复

存储时顺寻和取出的顺序不同

放到HashSet集合中的元素实际上是放到HashMap集合的key部分

TreeSet

无需不可重复,但是存储的元素可以自动按照大小顺序排序成为:可排序集合

Map

Map集合和Collection集合没有关系

Map集合以key和value的这种键值对的方式存储元素

key和value都是存储java对象的内存地址

所有Map集合的key特点:无需不可重复

Map中的常用方法

  1. V put(K key, V value)

    向Map集合中添加键值对

  2. V get(Object key)

    通过key获取value

  3. void clear()

    清空Map集合

  4. boolean containsKey(Object key)

    判断Map中是否包含某个key

  5. boolean containsValye(Object value)

    判断Map中是否包含某个value

  6. boolean isEmpty()

    判断Map集合中元素个数是否为0

  7. Set keySet()

    获取Map集合所有的key(所有的键是一个set集合)

  8. V remove(Object key)

    通过key删除键值对

  9. int size()

    获取Map集合中键值对的的个数

  10. Collection values()

    获取Map集合中所有的value,返回一个Collection

  11. Set<Map.Entry<K,V>> entrySet()

    获取Map集合中所有的value,返回一个Collection

    map
    --------------------
    1    zhangshan
    2    lisi
    3    wangwu
    4    zhouliu
    Set set = map.entrySet();
    set集合对象
    1=zhansgan
    2=lisi
    3=wangwu
    4=zhaoliu
    //Map集合通过entrySet()方法转换成这个Set集合,Set集合中元素的类型是Map.Entry<K,V>
    //Map.Entry和String一样,都是一种类型的名字,只不过Map.Entry是Map静态内部类
    

HashMap

HasMap集合底层是哈希表数据结构,是非线程安全的。

在JDK8以后,如果哈希单向链表中元素超过8个,单向链表这种数据结构会变成红黑树数据结构,当红黑树上的节点数量小于6以后,会重新把红黑树变成单向链表数据结构。

HasMap集合的默认初始化容量是16,默认加载因子是0.75(默认加载因子是当HashMap集合底层数组的容量达到75%的时候,数组开始扩容)

HashMap集合初始化容量必须是2的倍数,这也是官方推荐的,这是因为达到散列均匀,为了提高HashMap集合的存取效率所必需的

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值