- 1、为什么需要集合
- 2、数组和集合的区别
- 3 List集合
- 3.1 ArrayList集合
- 常用方法:
- 3.2 linkedList集合
- 4、Set集合
- 4.2 hashSet
- 4.3 linkedHashSet
- 5、 Map集合
- Map接口的常用方法
-
java是面向对象的语言,为了方便 *** 作多个对象,我们需要把对象存储起来。
-
既然要存储多个对象,那么就需要一个容器
-
java为我们提供了集合
-
长度的区别
- 数组长度固定
- 集合长度可变
-
元素的数据类型
- 数组只能够存储的基本数据类型,也可以存储引用类型(String)
- 集合只能存储引用类型(假设你存储的是int,java是会动装箱成integer)
集合的大致结构:
List集合主要有三个子类
- ArrayList (底层是数组)
- linkList (底层是链表)
- Vector (底层是数组)
查看ArrayList的层次结构图:
右键类
常用方法:ArrayList底层其实就是⼀个数组,ArrayList中有扩容这么⼀个概念,正因为它扩容,所以它能够实现“动态”增⻓
ArrayList 常用方法列表如下:
(点击对应的方法到相应网站查看详解。)
public class ArrayList01 { public static void main(String[] args) { //add方法 add(E element) 默认再末尾进行加入 ArrayListarrayList = new ArrayList<>(); arrayList.add(1); arrayList.add(2); System.out.println(arrayList.get(0)); System.out.println(arrayList.get(1)); //List的遍历,forEach方法 System.out.println("add--------"); for (Integer element : arrayList) { System.out.println(element); } //List的遍历,常规方法 System.out.println("------------"); int size = arrayList.size(); //获取集合的长度 for (int i = 0; i < size; i++) { System.out.println(arrayList.get(i)); } //使用迭代器: //add(int index,E element) 在下标中插入 //arrayList.add(1,3); System.out.println("------------"); Iterator iter = arrayList.iterator(); while(iter.hasNext()) { int element = (Integer) iter.next(); System.out.println(element ); } //set方法 set(int index,E element) 替换下标为index的元素,新的元素为element //arrayList.set(1,2); System.out.println("Set--------"); for (Integer element : arrayList) { System.out.println(element); } //remove方法 remove(int index) 删除下标为index的元素 //arrayList.remove(1); System.out.println("remove------"); arrayList.forEach(integer -> { System.out.println(integer); }); } }
3.2 linkedList集合由于ArrayList是List的子类,所以定义的时候也是可以这样定义的:
List> list = new ArrayList<>();
- 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声明的方法如下表中所示 -
HashSet的要点:
- 实现Set接⼝
- 不保证迭代顺序
- 允许元素为null
- 底层实际上是⼀个HashMap实例
- ⾮同步
- 初始容量⾮常影响迭代性能
解决了hasSet的无序
5、 Map集合Alt+7查看当前类的所有方法属性
注意Map同样和set是一个接口
Map接口的常用方法
V和Set代表返回的数据类型
可见Map的子类有这些
hashMap和linkedHashMap
-
HashMap:存储数据采用的哈希表结构,元素的存取顺序不能保证一致。由于要保证键的唯一、不重复,==需要重写键的hashCode()方法、equals()方法。 ==
-
linkedHashMap:HashMap下有个子类linkedHashMap,存储数据采用的哈希表结构+链表结构。通过链表结构可以保证元素的存取顺序一致;通过哈希表结构可以保证的键的唯一、不重复,需要重写键的hashCode()方法、equals()方法。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)