集合的知识补充学习
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();
...
}
- 点赞
- 收藏
- 关注作者
评论(0)