版权声明:程序猴jwang版权所有 https://blog.csdn.net/qq_21046965/article/details/83066319
前言
本章将讲解集合的基本概念
基础
1.数组的优劣
优势:是一种简单的线性序列,可以快速的访问数组元素,效率高。如果从效率和类型检查的角度讲,数组是最好的。
劣势:不灵活。数组的容量需要事先定义好,无法随着需求的变化而扩容。
2.容器类
综上所述,我们需要一个更为强大的容器来存储所需要的数据对象集合,基本容器类如下所示:
为了更好的学习容器,这里先行说一下泛型的概念:
泛型是jdk1.5之后新增加的特性,它可以帮助我们建立类型安全的集合,在使用了泛型的集合中,遍历无需进行强制转换,泛型简单的理解就是标记本集合存放的数据类型。如 LIst<String> list = new ArrayList<String>();定义集合中<String>就是一个泛型,它告诉编译器,我声明的LIst集合存放的是String类型的对象。
3.Collection容器类的常用方法(ArrayList为例)
Collection集合的接口有两个子接口(List和Set),基本方法大致相同,这里我们以List的一个实现类:ArrayList进行讲解
- public boolean add(E e):表示向集合中按顺序添加元素
- public void add(int index,E element):表示向集合指定索引处插入元素,使用该方法注意数组越界(0=<index<=集合长度)
- public boolean addAll(Collection<? extends E> c):表示向集合中添加另外一个集合,需注意类型一致或继承关系
- public boolean addAll(int index,Collection<? extends E> c):表示向集合指定索引处中添加另外一个集合,注意数组越界
- public void clear():表示清空该集合,移除所有元素。
- public boolean contains(Object o):判断集合中是否包含某个元素,底层需元素对象的equals方法支持
- public int indexOf(Object o):从前往后判断对象在集合中的索引位置,底层需元素对象equals方法支持
- public int lastIndexOf(Object o):从后往前判断对象在集合中的索引位置,底层需元素对象equals方法支持
- public E get(int index):表示从集合中获取指定索引的元素,注意数组越界;该方法Set实现类中没有
- public E set(int index,E element):替换某个下标位置的元素值
- public boolean isEmpty():判断集合是否为空,即size()为0
- public int size():返回集合的长度值
- public E remove(int index):表示从集合中移除某个索引下的元素
- public boolean remove(Object o):表示从集合中移除某个元素
4.Map容器类的常用方法(HashMap为例)
Map集合,存储的是键值对,即key:value的形式如{1=aa, 2=bb},这里我们以Map的一个实现类:HashMap进行讲解
- public V put(K key,V value):用于向Map集合中加入元素,以key-value形式存储
- public V get(Object key):获取Map集合中指定key的value值
- public Set<K> keySet():用于获取Map集合中的key值集合,该集合为Set类型
- public Set<Map.Entry<K,V>> entrySet():获取Map对象的键值对集合,该集合为Set类型
有兴趣的同学可以学习一下这些容器类的底层原理,对日后的工作和学习还是蛮有帮助的。这个我有时间也会在这里更新!!
要点:
1.List和Set的区别
- Set其中的值不允许重复,无序的数据结构
- List其中的值允许重复,因为其为有序的数据结构
2.ArrayList和LinkedList的区别
- ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构
- 对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针
- 对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据
3.HashSet和TreeSet的区别
- TreeSet 是二差树实现的,Treeset中的数据是自动排好序的,不允许放入null值。
- HashSet 是哈希表实现的,HashSet中的数据是无序的,可以放入null,但只能放入一个null,两者中的值都不能重复,就如数据库中唯一约束。
- HashSet要求放入的对象必须实现HashCode()方法,放入的对象,是以hashcode码作为标识的,而具有相同内容的 String对象,hashcode是一样,所以放入的内容不能重复。但是同一个类的对象可以放入不同的实例 。
4.HashMap和Hashtable的区别
- HashMap中键值 允许为空 并且是非同步的
- Hashtable中键值 不允许为空 是同步的
- 继承不同,但都实现了Map接口