LinkedList可以根据索引来访问集合中的元素,此外还实现了Deque接口,所以也可以当成双端队列来使用,即可当“栈”(先进后出),也可以当作队(先进先出);内部是以线性表和链表实现的,保证输入的顺序。通常用Iterator遍历。
示例:
public class LinkedListDemo {
/**
* @param args
*/
public static void main(String[] args) {
LinkedList<String> list = new LinkedList<String>();
list.add("哈哈");
list.add("呵呵");
list.add("嘿嘿");
print(list);
list.addFirst("嘻嘻");//链表可以在头或尾插入
print(list);
//将元素加入到对头
list.offerFirst("来来");
//将元素加入到队尾
list.offerLast("去去");
print(list);
//访问并不删除栈顶
System.out.println("访问并不删除栈顶----" +list.peekFirst());
print(list);
//访问并删除栈顶
System.out.println("访问并删除栈顶----" + list.poll());
print(list);
}
public static void print(List list){
Iterator iterator = list.iterator();
while(iterator.hasNext()){
System.out.print(iterator.next() + " ");
}
System.out.println();
}
}
注意:LinkedList在进行删除、插入操作时性能更优,而ArrayList在遍历的时候应能更优。
LinkedHashMap
LinkedHashMap也是使用双向链表来维护key-value,保证迭代顺序与key-value对的插入顺序一直。
示例:
public class LinkedHashMapDemo {
/**
* @param args
*/
public static void main(String[] args) {
LinkedHashMap<Integer, String> map = new LinkedHashMap<Integer,String>();
map.put(12, "吃饭");
map.put(14, "睡觉");
map.put(13, "打豆豆");
map.put(11, "刷牙");
map.put(15, "上厕所");
//第一种遍历方式keySet()
Set<Integer> keySet = map.keySet();
Iterator<Integer> i = keySet.iterator();
while(i.hasNext()){
Integer key = i.next();
System.out.println("键是:" + key + "值是:" + map.get(key));
}
}
}
collections查找替换操作
示例:
public class Demo10 {
public static void main(String[] args) {
List list = new ArrayList<Integer>();
list.add(4);
list.add(3);
list.add(12);
list.add(-9);
//自然排序
Collections.sort(list);
print(list);
//查找、替换
System.out.println("最大元素是:" + Collections.max(list));
System.out.println("4的索引是:" + Collections.binarySearch(list, 4));
System.out.println("替换所有的元素:" );
Collections.fill(list, 1);
print(list);
}
public static void print(List<Integer> arr){
for(Integer str:arr){
System.out.print(str + " ");
}
System.out.println();
}
}