一、 集合的体系:
----------| Collection 单列集合 的根接口
--------------| List 如果是实现了List接口的集合类,该集合类具备的特点:有序,可重复。
--------------| Set 如果是实现了Set接口的集合类,该集合类具备的特点: 无序,不可重复。
有序:集合的有序不是指自然顺序,而是指添加进去的顺序与元素出来的顺序是一致的。
List接口中特有的方法具备的特点: 操作的方法都存在索引值。
只有List接口下面的集合类才具备索引值。其他接口下面的集合类都没有索引值。
二、List接口中特有方法:
添加
add(intindex, E element) 把元素添加到集合中的指定索引值位置上
addAll(intindex, Collection<? extends E> c) 把c的元素添加到此集合指定索引值的位置上
获取:
get(intindex)
indexOf(Objecto) 找出指定元素第一次出现在集合中 的索引值
lastIndexOf(Objecto) 找出指定元素最后一次出现在集合中的索引值
subList(intfromIndex, int toIndex) 指定开始与结束的索引值截取集合中的元素
修改:
set(intindex, E element) 使用指定的元素替换指定索引值位置的元素
迭代
listIterator()
*/
package cn.itcast.list;
import java.util.ArrayList;
import java.util.List;
public class Demo2 {
publicstatic void main(String[] args) {
Listlist= new ArrayList();
list.add("狗娃");
list.add("狗剩");
list.add("铁蛋"); //把元素添加到集合的末尾处。
list.add("狗娃");
//添加方法
list.add(1,"赵本山"); // 把元素添加到集合中的指定索引值位置上。
Listlist2 = new ArrayList();
list2.add("本山");
list2.add("小沈阳");
list.addAll(2,list2);//把list2的元素添加到list集合指定索引值的位置上。
//获取的方法
System.out.println("get方法获取元素:"+list.get(1));//根据索引值获取集合中的元素
使用get方法遍历集合的元素:
for(int i = 0; i < list.size() ; i++) {
System.out.print(list.get(i)+",");
}
System.out.println("找出指定元素第一次出现在集合中的索引值:"+ list.indexOf("本山"));
System.out.println("找指定的元素最后一次出现在集合中的索引值:"+list.lastIndexOf("狗娃"));
ListsubList = list.subList(1, 3); //指定开始与结束的索引值截取集合中的元素。
System.out.println("子集合的元素是:"+subList);
list.set(3,"赵本山"); //使用指定的元素替换指定索引值位置的元素。
System.out.println("集合的元素:"+list);
}
}
/*
迭代
迭代器在变量元素的时候要注意事项:在迭代器迭代元素的过程中,不允许使用集合对象改变集合中的元素个数,如果需要添加或者删除只能使用迭代器的方法进行操作。
如果使用过了集合对象改变集合中元素个数那么就会出现ConcurrentModificationException异常。
迭代元素 的过程中: 迭代器创建到使用结束的时间。
listIterator()
ListIterator特有的方法:
添加:
hasPrevious() 判断是否存在上一个元素。
previous() 当前指针先向上移动一个单位,然后再取出当前指针指向的元素。
next(); 先取出当前指针指向的元素,然后指针向下移动一个单位。
---------------------------
add(Ee) 把当前有元素插入到当前指针指向的位置上。
set(Ee) 替换迭代器最后一次返回的元素。
*/
package cn.itcast.list;
import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;
public class Demo3 {
publicstatic void main(String[] args) {
Listlist = new ArrayList();
list.add("狗娃");
list.add("狗剩");
list.add("铁蛋");
list.add("美美");
ListIteratorit = list.listIterator(); //返回的是一个List接口中特有的迭代器
/*System.out.println("有上一个元素吗?"+it.hasPrevious());
System.out.println("获取上一个元素:"+it.previous());
it.next();
System.out.println("获取上一个元素:"+it.previous());
while(it.hasNext()){
it.next();
}
while(it.hasPrevious()){
System.out.println("元素:"+it.previous());
}
it.next();
it.next();
it.add("张三");
*/
it.next();
it.next();
it.set("张三");
System.out.println("集合的元素:"+list);
}
}
三、List接口的实现类
--------------------| ArrayList
--------------------| LinkedList
--------------------| Vector(了解即可)底层也是维护了一个Object的数组实现的,实现与ArrayList是一样的,但是Vector是线程安全的,操作效率低。
ArrayList 底层是维护了一个Object数组实现 的, 特点: 查询速度快,增删慢。
什么时候使用ArrayList: 如果目前的数据是查询比较多,增删比较少的时候,那么就使用ArrayList存储这批数据。 比如 :高校的 图书馆
ArrayList 特有的方法:
ensureCapacity(intminCapaci上ty) 如有必要,增加此ArrayList 实例的容量,以确保它至少能够容纳最小容量参数所指定的元素数。
trimToSize() 将此 ArrayList 实例的容量调整为列表的当前大小。
笔试题目:使用ArrayList无参的构造函数创建一个对象时, 默认的容量是多少? 如果长度不够使用时又自增增长多少?
ArrayList底层是维护了一个Object数组实现 的,使用无参构造函数时,Object数组默认的容量是10,当长度不够时,自动增长0.5倍。
LinkedList底层是使用了链表数据结构实现的, 特点: 查询速度慢,增删快。。
Linkedlist特有的方法:
1:方法介绍
addFirst(E e) 把元素添加到集合的首位置上
addLast(Ee) 把元素添加到集合的末尾处。
getFirst()获取集合中首位置的元素
getLast()获取集合中末尾的元素
removeFirst()删除集合中的首位置元素并返回
removeLast()删除集合中的末位置元素并返回
2:数据结构
1:栈 (1.6) : 主要是用于实现堆栈数据结构的存储方式。
先进后出
push()将该元素插入此集合的开头处。
pop()移除并返回集合中的第一个元素
2:队列(双端队列1.5): 主要是为了让你们可以使用LinkedList模拟队列数据结构的存储方式。
先进先出
offer() 将指定元素添加到此列表的末尾(最后一个元素)。
poll() 删除集合的首元素:
3:返回逆序的迭代器对象
descendingIterator() 返回逆序的迭代器对象
*/
public class Demo8 {
publicstatic void main(String[] args) {
LinkedList list= new LinkedList();
list.add("张三");
list.add("李四");
list.add("王五");
list.push("狗娃"); //将该元素插入此集合的开头处。
System.out.println("删除集合的首元素:"+list.pop());// 移除并返回集合中的第一个元素
list.offer("狗剩");
System.out.println("删除集合的首元素:"+list.poll());
System.out.println("集合中的元素:"+list);
*/
Iterator it = list.descendingIterator();
while(it.hasNext()){
System.out.println(it.next());
}
}
}