1、为什么需要集合
-
java是面向对象的语言,为了方便操作多个对象,我们需要把对象存储起来。 -
既然要存储多个对象,那么就需要一个容器 -
java为我们提供了集合
2、数组和集合的区别
-
长度的区别
-
元素的数据类型
- 数组只能够存储的基本数据类型,也可以存储引用类型(String)
- 集合只能存储引用类型(假设你存储的是int,java是会动装箱成integer)
集合的大致结构:
3 List集合
List集合主要有三个子类
- ArrayList (底层是数组)
- LinkList (底层是链表)
- Vector (底层是数组)
3.1 ArrayList集合
查看ArrayList的层次结构图:
? 右键类
ArrayList底层其实就是?个数组,ArrayList中有扩容这么?个概念,正因为它扩容,所以它能够实现“动态”增?
常用方法:
ArrayList 常用方法列表如下: (点击对应的方法到相应网站查看详解。)
public class ArrayList01 {
public static void main(String[] args) {
ArrayList<Integer> arrayList = new ArrayList<>();
arrayList.add(1);
arrayList.add(2);
System.out.println(arrayList.get(0));
System.out.println(arrayList.get(1));
System.out.println("add--------");
for (Integer element : arrayList) {
System.out.println(element);
}
System.out.println("------------");
int size = arrayList.size();
for (int i = 0; i < size; i++) {
System.out.println(arrayList.get(i));
}
System.out.println("------------");
Iterator iter = arrayList.iterator();
while(iter.hasNext()) {
int element = (Integer) iter.next();
System.out.println(element );
}
System.out.println("Set--------");
for (Integer element : arrayList) {
System.out.println(element);
}
System.out.println("remove------");
arrayList.forEach(integer -> {
System.out.println(integer);
});
}
}
由于ArrayList是List的子类,所以定义的时候也是可以这样定义的: List<?> list = new ArrayList<>();
3.2 LinkedList集合
- Java的LinkedList是一种常用的数据容器,与ArrayList相比,LinkedList的增删操作效率更高,而查改操作效率较低。
- LinkedList 实现了Queue接口,能当作队列使用。
- LinkedList 实现了List 接口,能对它进行列表操作。
- LinkedList 实现了Deque 接口,即能将LinkedList当作双端队列使用。
- LinkedList 实现了Cloneable接口,能克隆。
- LinkedList 实现了java.io.Serializable接口,这意味着LinkedList支持序列化,能通过序列化去传输。
1.增
public boolean add(E e),链表末尾添加元素,返回是否成功;
public void add(int index, E element),向指定位置插入元素;
public boolean addAll(Collection<? extends E> c),将一个集合的所有元素添加到链表后面,返回是否成功;
public boolean addAll(int index, Collection<? extends E> c),将一个集合的所有元素添加到链表的指定位置后面,返回是否成功;
public void addFirst(E e),添加到第一个元素;
public void addLast(E e),添加到最后一个元素;
public boolean offer(E e),向链表末尾添加元素,返回是否成功;
public boolean offerFirst(E e),头部插入元素,返回是否成功;
public boolean offerLast(E e),尾部插入元素,返回是否成功;
2.删
public void clear(),清空链表;
public E removeFirst(),删除并返回第一个元素;
public E removeLast(),删除并返回最后一个元素;
public boolean remove(Object o),删除某一元素,返回是否成功;
public E remove(int index),删除指定位置的元素;
public E poll(),删除并返回第一个元素;
public E remove(),删除并返回第一个元素;
3.查
public boolean contains(Object o),判断是否含有某一元素;
public E get(int index),返回指定位置的元素;
public E getFirst(), 返回第一个元素;
public E getLast(),返回最后一个元素;
public int indexOf(Object o),查找指定元素从前往后第一次出现的索引;
public int lastIndexOf(Object o),查找指定元素最后一次出现的索引;
public E peek(),返回第一个元素;
public E element(),返回第一个元素;
public E peekFirst(),返回头部元素;
public E peekLast(),返回尾部元素;
4.改
public E set(int index, E element),设置指定位置的元素;
4、Set集合
Set 是一个不能包含重复元素的Collection 。它模拟了数学集合抽象。
Set 接口仅包含从Collection 接口继承的方法,并添加禁止重复元素的限制。
Set 还为equals 和hashCode 操作的行为添加了一个更强的规范,允许Set 实例有意义地进行比较,即使它们的实现类型不同。
Set在HashSet ,TreeSet ,LinkedHashSet 等各种类中都有实现。
Set 声明的方法如下表中所示 -
编号 | 方法 | 描述 |
---|
1 | add() | 添加一个对象到集合中。 | 2 | clear() | 从集合中删除所有对象。 | 3 | contains() | 如果指定的对象是集合中的元素,则返回true 。 | 4 | isEmpty() | 如果集合没有元素,则返回true 。 | 5 | iterator() | 返回集合的Iterator 对象,该对象可用于检索对象。 | 6 | remove() | 从集合中删除指定对象。 | 7 | size() | 返回集合中的元素数。 | 8 | first() /last() | 返回集合第一个元素/返回集合最后一个元素。这是在TreeSet中的方法 |
4.2 hashSet
HashSet的要点:
- 实现Set接?
- 不保证迭代顺序
- 允许元素为null
- 底层实际上是?个HashMap实例
- ?同步
- 初始容量?常影响迭代性能
4.3 LinkedHashSet
解决了hasSet的无序
5、 Map集合
Alt+7查看当前类的所有方法属性 注意Map同样和set是一个接口
Map接口的常用方法
V和Set代表返回的数据类型
方法名称 | 说明 |
---|
V get(Object key) | 返回 Map 集合中指定键对象所对应的值。V 表示值的数据类型 | V put(K key, V value) | 向 Map 集合中添加键-值对,返回 key 以前对应的 value,如果没有, 则返回 null | V remove(Object key) | 从 Map 集合中删除 key 对应的键-值对,返回 key 对应的 value,如果没有,则返回null | Set entrySet() | 返回 Map 集合中所有键-值对的 Set 集合,此 Set 集合中元素的数据类型为 Map.Entry | Set keySet() | 返回 Map 集合中所有键对象的 Set 集合 |
可见Map的子类有这些 hashMap 和LinkedHashMap
-
HashMap:存储数据采用的哈希表结构,元素的存取顺序不能保证一致。由于要保证键的唯一、不重复,==需要重写键的hashCode()方法、equals()方法。 == -
LinkedHashMap:HashMap下有个子类LinkedHashMap,存储数据采用的哈希表结构+链表结构。通过链表结构可以保证元素的存取顺序一致;通过哈希表结构可以保证的键的唯一、不重复,需要重写键的hashCode()方法、equals()方法。
|