集合
java的所有集合类都位于 java.util 包,其中提供了一个表示和操作对象集合的统一构架,包含大量集合接口,以及这些接口的实现类和操作它们的算法。一个集合是一个对象,但它表示一组对象,Java 集合中实际存放的是对象的引用值,不能存放基本数据类型值。
Java 集合框架主要包括两种类型的容器,一种是集合(Collection),存储一个元素集合,另一种是图(Map),存储键/值对映射。Collection 接口又有 3 种子类型,List、Set 和 Queue,再下面是一些抽象类,最后是具体实现类,常用的有 ArrayList、LinkedList、HashSet、LinkedHashSet、HashMap、LinkedHashMap 等等。
Collection
Collection 是最基本的集合接口,一个 Collection 代表一组 Object,即 Collection 的元素, Java不提供直接继承自Collection的类,只提供继承于的子接口(如List和set)。
Collection 接口存储一组不唯一,无序的对象。
主要方法
- boolean add(Object o) 添加对象到集合
- boolean remove(Object o) 删除指定的对象
- int size() 返回当前集合中元素的数量
- boolean contains(Object o) 查找集合中是否有指定的对象
- boolean isEmpty() 判断集合是否为空
- Iterator iterator() 返回一个迭代器
- boolean containsAll(Collection c) 查找集合中是否有集合c中的元素
- boolean addAll(Collection c) 将集合c中所有的元素添加给该集合
- void clear() 删除集合中所有元素
- void removeAll(Collection c) 从集合中删除c集合中也有的元素
- void retainAll(Collection c) 从集合中删除集合c中不包含的元素
代码案例
public static void main(String[] args){
//学习接口中的方法 接口指向实现类
Collection coll=new ArrayList();
//添加元素
coll.add("java");
coll.add(1);
//添加元素
Collection coll1=new ArrayList();
coll1.add("html");
coll1.add("spring");
System.out.println("往coll中添加coll1:"+coll.add(coll1));
System.out.println(coll);
//删除元素
//coll.clear();
System.out.println("移除不存在的元素:"+coll.remove("spring"));
//System.out.println("移除整个集合:"+coll1.removeAll(coll1));
System.out.println("coll中的元素:"+coll);
System.out.println(coll.retainAll(coll1));
System.out.println("coll中的元素:"+coll);
//查看元素
System.out.println("查看当前集合是否为空:"+coll.isEmpty());
System.out.println("查看当前集合元素个数:"+coll.size());
System.out.println("查看当前集合是否包含元素1:"+coll.contains(1));
}
public static void main(String[] args) {
//创建集合对象
Collection coll = new ArrayList();
//添加元素
coll.add("String");
coll.add("1");
coll.add("Integer");
coll.add("Scanner");
//迭代元素
System.out.println("foreach循环迭代");
for(Object obj:coll) {
String str = (String)obj;
System.out.println(str);
}
System.out.println("iterator 迭代器");
Iterator it = coll.iterator();//实现类对象
while(it.hasNext()) {//下面是否存在元素 如果存在元素 返回true 如果不存在返回false
//获取元素
System.out.println(it.next());
}
System.out.println("迭代器的变种写法");
for(Iterator it1 = coll.iterator();it1.hasNext();) {
System.out.println(it1.next());
}
}
ArrayList
概念
ArrayList底层是用数组实现的,可以认为ArrayList是一个可改变大小的数组。随着越来越多的元素被添加到ArrayList中,其规模是动态增加的。它继承了AbstractList,实现了List、RandomAccess, Cloneable, java.io.Serializable。 基本的ArrayList,长于随机访问元素,但是在List中间插入和移除元素时较慢。同时,ArrayList的操作不是线程安全的!一般在单线程中才使用ArrayList,而在多线程中一般使用Vector或者CopyOnWriteArrayList。
常用方法
-
public boolean add(E e) :将指定的元素添加到此集合的尾部。
-
public E remove(int index) :移除此集合中指定位置上的元素。返回被删除的元素。
-
public E get(int index) :返回此集合中指定位置上的元素。返回获取的元素。
-
public int size() :返回此集合中的元素数。遍历集合时,可以控制索引范围,防止越界。
-
contains(object obj):判断是否含有指定元素
-
public E set(int index, String element):把此集合中指定索引的元素,改为新的元素
public static void main(String[] args) {
//创建集合对象
ArrayList<String> list = new ArrayList<String>();
//添加元素
list.add("hello");
list.add("world");
list.add("java");
//public E get(int index):返回指定索引处的元素
System.out.println("get:"+list.get(0));
System.out.println("get:"+list.get(1));
System.out.println("get:"+list.get(2));
//public int size():返回集合中的元素的个数
System.out.println("size:"+list.size());
//public E remove(int index):删除指定索引处的元素,返回被删除的元素
System.out.println("remove:"+list.remove(0));
//遍历输出
for(int i = 0; i < list.size(); i++){
System.out.println(list.get(i));
}
}
循环遍历
public static void main(String[] args){
//创建对象
List ls=new ArrayList();
ls.add("小炮 崔丝塔娜");
ls.add("大嘴 克格莫");
ls.add("滑板鞋 卡利斯塔");
ls.add("老鼠 biubiubiu");
//查看当前是否存在大嘴 克格莫 如果存在则添加元素 ez 伊泽瑞尔
System.out.println("普通for循环");
for(int i=0;i<ls.size();i++){
if("大嘴 克格莫".equals(ls.get(i))){
ls.add("ez 伊泽瑞尔");
}
}
System.out.println(ls);
// System.out.println("foreach循环");
// for(Object object:ls){
// String str=(String)object;
// if("大嘴 克格莫".equals(str)){
// ls.add("ez 伊泽瑞尔");
// }
// System.out.println(object);
// }
System.out.println("======ListIterator");{
ListIterator iterator=ls.listIterator();
while (iterator.hasNext()){
if("大嘴 克格莫".equals(iterator.next())) {
iterator.add("ez 伊泽瑞尔");
}
}
System.out.println(ls);
}
}
LinkedList
LinkedList底层是通过双向链表实现的。所以,LinkedList和ArrayList之前的区别主要就是数组和链表的区别。
LinkedList和ArrayList相比,增删的速度较快。但是查询和修改值的速度较慢。同时,LinkedList还实现了Queue接口,所以他还提供了offer(), peek(), poll()等方法。
常用方法
增加
-
add(E e):在链表后添加一个元素; 通用方法
-
addFirst(E e):在链表头部插入一个元素; 特有方法
-
addLast(E e):在链表尾部添加一个元素; 特有方法
-
push(E e):与addFirst方法一致
-
offer(E e):在链表尾部插入一个元素
-
add(int index, E element):在指定位置插入一个元素。
-
offerFirst(E e):JDK1.6版本之后,在头部添加;特有方法
-
offerLast(E e):JDK1.6版本之后,在尾部添加; 特有方法
删除
-
remove() :移除链表中第一个元素; 通用方法
-
remove(E e):移除指定元素; 通用方法
-
removeFirst(E e):删除头,获取元素并删除; 特有方法
-
removeLast(E e):删除尾; 特有方法
-
pollFirst():删除头; 特有方法
-
pollLast():删除尾; 特有方法
-
pop():和removeFirst方法一致,删除头。
-
poll():查询并移除第一个元素 特有方法
查询
-
get(int index):按照下标获取元素; 通用方法
-
getFirst():获取第一个元素; 特有方法
-
getLast():获取最后一个元素; 特有方法
-
peek():获取第一个元素,但是不移除; 特有方法
-
peekFirst():获取第一个元素,但是不移除;
-
peekLast():获取最后一个元素,但是不移除;
-
pollFirst():查询并删除头; 特有方法
-
pollLast():删除尾; 特有方法
-
poll():查询并移除第一个元素 特有方法
public static void main(String[] args) {
//1.创建对象
LinkedList<String> ls = new LinkedList<>();
//2.添加元素
ls.add("不知火舞");
System.out.println(ls.get(0));
System.out.println(ls);
ls.add("橘右京");
ls.add("娜可露露");
ls.add("宫本武藏");
//多了些针对于头尾元素的操作
ls.addFirst("草薙京");
ls.addLast("八神庵");
System.out.println(ls.offer("春丽"));//添加到末尾
System.out.println(ls.offerFirst("chunli"));
System.out.println(ls.offerLast("春来"));
System.out.println(ls);
System.out.println(ls.element());//获取头元素
System.out.println(ls.getFirst());
System.out.println(ls.getLast());
System.out.println(ls);
//ls=null;
System.out.println(ls.peekFirst());
System.out.println(ls.peek());
}
System.out.println(ls.getFirst());
System.out.println(ls.getLast());
System.out.println(ls);
//ls=null;
System.out.println(ls.peekFirst());
System.out.println(ls.peek());
}