1.添加一组元素
通过Arrays.asList()或者Collections.addAll()添加一组元素
Arrays.asList()方法接收一个数组或一个用逗号分隔的元素列表
Collections.addAll(),接收一个Collection对象,以及一个数组或一个用逗号分隔的元素列表(推荐使用这种方法)
public class Demo1 {
public static void main(String[] args) {
List<Integer> list1 = Arrays.asList(1, 2, 3);
System.out.println(list1); // [1,2,3]
// list1.add(4); 报错java.lang.UnsupportedOperationException
// 因为Arrays.asList底层是数组,数组大小无法改变
list1.set(1, 4); // 修改数据
System.out.println(list1); // [1,4,3]
Collection<Integer> collection = new ArrayList<Integer>(Arrays.asList(1, 2, 3));
Collections.addAll(collection, 4, 5, 6);
System.out.println(collection);// [1, 2, 3, 4, 5, 6]
Integer[] integers = { 7, 8, 9 };
Collections.addAll(collection, integers);
System.out.println(collection); // [1, 2, 3, 4, 5, 6, 7, 8, 9]
}
}
2.List,Set,Map的区别
先看一个小例子
class NBA{
static Collection<Object> fill(Collection<Object> collection){
collection.add("火箭");
collection.add("骑士");
collection.add("马刺");
collection.add("马刺");
return collection;
}
static Map fill(Map<String, String> map){
map.put("hj","火箭");
map.put("qs","骑士");
map.put("mc","马刺");
map.put("mc","马刺");
return map;
}
}
public class Demo1 {
public static void main(String[] args) {
System.out.println(NBA.fill(new ArrayList<>())); //[火箭, 骑士, 马刺, 马刺]
System.out.println(NBA.fill(new LinkedList<>())); //[火箭, 骑士, 马刺, 马刺]
System.out.println(NBA.fill(new HashSet<>())); //[马刺, 火箭, 骑士]
System.out.println(NBA.fill(new LinkedHashSet<>())); // [火箭, 骑士, 马刺]
System.out.println(NBA.fill(new TreeSet<>()));// [火箭, 马刺, 骑士]
System.out.println(NBA.fill(new HashMap())); // {mc=马刺, hj=火箭, qs=骑士}
System.out.println(NBA.fill(new LinkedHashMap())); // {hj=火箭, qs=骑士, mc=马刺}
System.out.println(NBA.fill(new TreeMap())); // {hj=火箭, mc=马刺, qs=骑士}
}
}
List:以特定的顺序保存元素
List有二种类型:
1.ArrayList:擅长随机访问元素,但是在List中间插入和移除元素比较慢
2.LinkedList:擅长在List中间插入和移除元素,但随机访问元素慢
Set:元素不能重复
Map:在每个槽内保存了二个对象,即键与之相关联的值。
HashSet使用了相当复杂的方式存储元素,它是最快获取元素的方式。
TreeSet:按照比较结果的升序保存对象
LinkedHashSet:按照被添加的顺序保存对象
HashMap,LinkedHashMap,TreeMap和Set相类似。
迭代器
Java的Iterator只能单向移动,用于遍历数据
ListInterator是可以双向移动的
public class Demo1 {
public static void main(String[] args) {
List<Integer> list = Arrays.asList(1, 2, 3);
// 1.获得Iterator对象
Iterator<Integer> iterator = list.iterator();
// 检查序列中是否还有元素
while (iterator.hasNext()) {
// 获取序列中的下一个元素
Integer value = iterator.next();
System.out.println(value);
}
System.out.println("---------------");
// 用foreach更简单
for (Integer integer : list) {
System.out.println(integer);
}
}
}
LinkedList常用方法
1.getFirst()和element() 返回第一个元素,并不移除,如果List为空,抛出NoSuchElementException.peek()在列表为空时,返回null
2.removeFirst和remove,移除并返回列表的头,而在列表为空时抛出NoSuchElementException.poll()在列表为空时,返回null
3.addFirst(),add(),addLast(),都将某元素插入到列表的头尾。
4.removeLast()移除并返回列表的最后一个元素。
栈与队列
栈是一种后进后出的容器。而队列是一种先进先出的容器。LinkedList拥有各种栈与队列的行为。