集合的知识补充学习

举报
多米诺的古牌 发表于 2021/08/18 23:50:39 2021/08/18
【摘要】 1.集合的定义Java集合类存放在java.util包中,是一个用来存放对象的容器,可以存放不同数据类型,并且集合中存放的都是对象的引用,而非对象本身,所以我们称集合中的对象就是集合中对象的引用,而对象本身还是放在堆内存中。2.常用的集合类的组成顶级接口Collection和Map接口,Collection接口下常用的实现类有List、Set、Queue,而Map接口的常用实现类有HashM...

1.集合的定义

Java集合类存放在java.util包中,是一个用来存放对象的容器,可以存放不同数据类型,并且集合中存放的都是对象的引用,而非对象本身,所以我们称集合中的对象就是集合中对象的引用,而对象本身还是放在堆内存中。

2.常用的集合类的组成

顶级接口Collection和Map接口,Collection接口下常用的实现类有List、Set、Queue,而Map接口的常用实现类有HashMap、TreeMap、HashTable等;

Collections是一个处理集合的工具类,里面有需要静态方法,处理集合中的如排序、同步等方法;

2.1Collection是除过Map系列集合外所有集合的父接口,在Collection中定义了List、Set、Queue等的一系列通用方法,这些方法可用于操作所有的单列集合,实现类只要根据这个规范方法进行实现就可以实现各自的对应操作,方法如下:

2.1.1 把给定的对象添加到当前集合中 public boolean add(E e);

2.1.2 清空集合中所有的元素 public void clear();

2.1.3 把给定的对象在当前集合中删除 public boolean remove(E e);

2.1.4 判断当前集合中是否包含给定的对象 public boolean contains(Object obj);

2.1.5 判断当前集合是否为空 public boolean isEmpty();

2.1.6 返回集合中元素的个数 public int size();

2.1.7 把集合中的元素存储到数组中 public Object[] toArray(): 

2.2 Collections中常用的方法有:

2.2.1 集合对比方法Collections.sort();

2.2.2 集合反转方法Collections.reverse();

2.2.3 集合中处理多线程问题的同步方法synchronizedList、synchronizedSet、synchronizedMap等;

2.3 HashSet是什么

查看源码可以看到HashSet的构造方法,其实HashSet就是一个HashMap

public HashSet() {
    map = new HashMap<>();
}

而接着查看HashSet中的add方法时,我们会发现,其实add方法就是借用了map中key值,由于map中的key是唯一的不重复的,所以可以看出Set为什么是不重复的;

public boolean add(E e) {
    return map.put(e, PRESENT)==null;
}

2.4 Map的使用

new Hash的时候其实默认会有两个参数,第一个是初始化容量(默认值是1<<4,即16,最大值是1<<30),第二个是加载因子(默认值是0.75f);

那么为什么需要初始化容量呢,因为map扩容对性能消耗会很大,而指定了容量会很大的避免了扩容,从而提高了效率;

2.4.1 处理map的线程安全问题则可以使用:

2.4.1.1 Conllections工具类下面的同步方法,Conllections.synchronizedMap(new HashMap());

2.4.1.2 使用HashTable()继续处理;

2.4.1.3 使用JUC下的ConcurrentHashMap()继续处理;

2.5 Iterator迭代器

Iterator是Java集合的顶层接口,这里不包括Map集合系列,因为Map接口是Map系列集合的顶层接口,因此除了Map系列集合外的所有集合都可以用Iterator迭代器进行遍历;

但是我们查看源码会发现Collection接口是继承Iterable的

public interface Collection<E> extends Iterable<E> {...}

继续点击进入Iterable接口查看到,原来里面封装了Iterator,所以只要实现了Iterable接口的类,就可以使用Iterator迭代器了。

而Iterator迭代器是存在于java.util包中,主要的方法有next()、hasNext()、remove()等方法。

public interface Iterable<T> {
    /**
     * Returns an iterator over elements of type {@code T}.
     *
     * @return an Iterator.
     */
    Iterator<T> iterator();
...
}


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。