java-其他集合
LinkedList
List接口
LinkedList也实现了List接口,可以使用add,remove等方法
双向链表
LinkedList实现了双向链表接口,具有addFirst和addLast方法,可以在链表的头部和尾部插入结点
队列
LinkedList也实现了队列接口,有offer和poll方法,分别是入队和出队
1 package 集合框架; 2 3 import java.util.LinkedList; 4 import java.util.Queue; 5 import 集合框架.words; 6 7 public class LinkedList练习 { 8 9 public static void main(String[] args) { 10 Queue<words> q=new LinkedList<words>(); 11 q.offer(new words('a')); 12 q.offer(new words('b')); 13 q.offer(new words('c')); 14 System.out.println(q.poll()); 15 System.out.println(q.poll()); 16 System.out.println(q.poll()); 17 } 18 }
HashMap
存储方式
HashMap的存储方式是键值对,前者是键key,后者是值value。get函数需要传递进去一个键,从而得到一个值。键不能重复但是值可以重复。
1 package 集合框架; 2 3 import java.util.HashMap; 4 5 public class HashMap练习 { 6 7 public static void main(String[] args) { 8 HashMap<String,Integer> h=new HashMap(); 9 h.put("aaa", 1); 10 h.put("bbb", 2); 11 h.put("ccc", 3); 12 System.out.println(h.get("aaa")); 13 } 14 }

HashSet
存储方式
HashSet中的元素不能重复,如果重复add进去,也不会存储下来
1 package 集合框架; 2 3 import java.util.HashSet; 4 5 public class HashSet练习 { 6 public static void main(String[] args) { 7 HashSet<String> h=new HashSet(); 8 h.add("aaa"); 9 h.add("aaa"); 10 for(String s:h) 11 { 12 System.out.println(s); 13 } 14 } 15 }

存储顺序
HashSet存储的元素没有任何顺序,在不同的JVM版本中所能看到的同一个HashSet的顺序也不相同。
遍历
因为HashSet本身无序,并且没有类似键值对相对应的关系,因此没有get函数。
如果想遍历HashSet,只能通过迭代器或者增强型for循环(参考上面“存储方式”中的代码)
HashSet和HashMap的关系
HashSet中,封装了一个HashMap,而传递到HashSet中的值,作为被封装的HashMap中的“key”进行存储,它对应的“value”是一个命名为PRESENT的static的Object对象。
Collection和Collections
Collection是 Set List Queue和 Deque的接口
Queue: 先进先出队列
Deque: 双向链表

Collections是一个容器的工具类,提供多种方法
reverse反转
1 package 集合框架; 2 3 import java.util.Collections; 4 import java.util.List; 5 import java.util.ArrayList; 6 7 public class Collections练习 { 8 public static void main(String[] args) { 9 List<Integer> l=new ArrayList(); 10 for(int i=1;i<=10;i++) 11 { 12 l.add(i); 13 } 14 System.out.println("集合为"+l); 15 Collections.reverse(l); 16 System.out.println("反转后集合为"+l); 17 } 18 }

shuffle混淆
1 package 集合框架; 2 3 import java.util.Collections; 4 import java.util.List; 5 import java.util.ArrayList; 6 7 public class Collections练习 { 8 public static void main(String[] args) { 9 List<Integer> l=new ArrayList(); 10 for(int i=1;i<=10;i++) 11 { 12 l.add(i); 13 } 14 System.out.println("集合为"+l); 15 Collections.shuffle(l); 16 System.out.println("混淆后集合为"+l); 17 } 18 }
sort排序
1 package 集合框架; 2 3 import java.util.Collections; 4 import java.util.List; 5 import java.util.ArrayList; 6 7 public class Collections练习 { 8 public static void main(String[] args) { 9 List<Integer> l=new ArrayList(); 10 for(int i=1;i<=10;i++) 11 { 12 l.add(i); 13 } 14 System.out.println("集合为"+l); 15 Collections.shuffle(l); 16 System.out.println("混淆后集合为"+l); 17 Collections.sort(l); 18 System.out.println("排序后集合为"+l); 19 } 20 }

swap交换
1 package 集合框架; 2 3 import java.util.Collections; 4 import java.util.List; 5 import java.util.ArrayList; 6 7 public class Collections练习 { 8 public static void main(String[] args) { 9 List<Integer> l=new ArrayList(); 10 for(int i=1;i<=10;i++) 11 { 12 l.add(i); 13 } 14 System.out.println("集合为"+l); 15 Collections.swap(l, 0, 9); 16 System.out.println("交换后集合为"+l); 17 } 18 }

rotate滚动
1 package 集合框架; 2 3 import java.util.Collections; 4 import java.util.List; 5 import java.util.ArrayList; 6 7 public class Collections练习 { 8 public static void main(String[] args) { 9 List<Integer> l=new ArrayList(); 10 for(int i=1;i<=10;i++) 11 { 12 l.add(i); 13 } 14 System.out.println("集合为"+l); 15 Collections.rotate(l, 3); 16 System.out.println("滚动三个单位后集合为"+l); 17 } 18 }

synchronizedList线程安全化
1 package 集合框架; 2 3 import java.util.Collections; 4 import java.util.List; 5 import java.util.ArrayList; 6 7 public class Collections练习 { 8 public static void main(String[] args) { 9 List<Integer> l=new ArrayList(); 10 List<Integer> safel=(List<Integer>)Collections.synchronizedList(l); 11 } 12 }
(2021.2.21 目前还没深入研究线程安全的问题,等我研究明白了回来补充这部分的内容)


浙公网安备 33010602011771号