【Java】Collection与Map接口总结
Collection
-----List
-----LinkedList 非同步
----ArrayList 非同步,实现了可变大小的元素数组
----Vector 同步 线程安全
------Stack
-----Set 不允许有相同的元素
Map
-----Hashtable 同步,实现一个key--value映射的哈希表
-----HashMap 非同步,
-----WeakHashMap 改进的HashMap,实现了“弱引用”,如果一个key不被引用,则被GC回收
子接口
Set,List
集合中只能放置对象的引用,不能放置原生数据类型,
我们需要使用原生数据类型的封装类才能加入到集合中
List常用方法:
package com.itlwc; import java.util.ArrayList; import java.util.List; public class Test { public static void main(String[] args) { List list = new ArrayList(); // 向列表的尾部追加指定的元素 list.add("lwc"); // 在列表的指定位置插入指定元素 list.add(1, "nxj"); // 追加指定 collection 中的所有元素到此列表的结尾 list.addAll(new ArrayList()); // 从列表中移除所有元素 list.clear(); // 如果列表包含指定的元素,则返回true list.contains("nxj"); // 如果列表包含指定 collection 的所有元素,则返回 true list.containsAll(new ArrayList()); // 比较指定的对象与列表是否相等 list.equals(new ArrayList()); // 返回列表中指定位置的元素 list.get(0); // 返回列表的哈希码值 list.hashCode(); // 返回列表中首次出现指定元素的索引,如果列表不包含此元素,则返回 -1 list.indexOf("lwc"); // 返回列表中最后出现指定元素的索引,如果列表不包含此元素,则返回 -1 list.lastIndexOf("lwc"); // 如果列表不包含元素,则返回 true list.isEmpty(); // 移除列表中指定位置的元素 list.remove(0); // 移除列表中出现的首个指定元素 list.remove("lwc"); // 从列表中移除指定 collection 中包含的所有元素 list.removeAll(new ArrayList()); // 用指定元素替换列表中指定位置的元素 list.set(0, "lp"); // 返回列表中的元素数 list.size(); // 返回列表中指定的fromIndex(包括)和toIndex(不包括)之间的部分视图 list.subList(1, 2); // 返回以正确顺序包含列表中的所有元素的数组 list.toArray(); // 返回以正确顺序包含列表中所有元素的数组 list.toArray(new String[] { "a", "b" }); } }
ArrayList
构造方法
public ArrayList()
public ArrayList(int initialCapacity)
public ArrayList(Collection c)
ArrayList依赖于数组实现的,初始长度为10的Object[],并且可随需要而增加的动态数组
当元素超过10,那么ArrayList底层会新生成一个数组,长度为原来的1.5倍+1,
然后将原数组内容复制到新数组中,并且后续增加的内容会放到新数组中,
当新数组无法容纳增加的元素,重复该过程
ArrayList对随机访问性能很好,但进行大量插入,删除操作,性能很差,
因为操作之后后续元素需要移动
遍历ArrayList
package com.itlwc; import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class Test { public static void main(String[] args) { List<String> list = new ArrayList<String>(); list.add("lwc"); list.add("nxj"); // 方法一 Iterator<String> ite1 = list.iterator(); while (ite1.hasNext()) { String str = ite1.next(); System.out.println(str); } System.out.println("---------------------"); // 方法二(方法一的变形) for (Iterator<String> ite2 = list.iterator(); ite2.hasNext();) { String str = ite2.next(); System.out.println(str); } System.out.println("---------------------"); // 方法三 for(String s : list){ System.out.println(s); } } } /* 打印结果: lwc nxj --------------------- lwc nxj --------------------- lwc nxj */
遍历LinkedList
package com.itlwc; import java.util.LinkedList; import java.util.List; import java.util.ListIterator; public class Test { public static void main(String[] args) { List link = new LinkedList(); link.add(123); link.add("lwc"); link.add(8.8); link.add("nxj"); link.add(520); printList(link); printReversedList(link); } private static void printList(List link) { System.out.println("正序链表中的元素"); // 的到链表的迭代器,位置指向链头 ListIterator li = link.listIterator(); // 判断迭代器中是否有下一个元素 while (li.hasNext()) { // 返回下个元素 System.out.print(li.next() + " "); } System.out.println(); } private static void printReversedList(List link) { System.out.println("逆向链表中的元素"); // 的到链表的迭代器,位置指向link.size()结尾 ListIterator li = link.listIterator(link.size()); // 判断迭代器中是否有前一个元素 while (li.hasPrevious()) { // 返回前一个元素 System.out.print(li.previous() + " "); } System.out.println(); } } /* 打印结果: 正序链表中的元素 123 lwc 8.8 nxj 520 逆向链表中的元素 520 nxj 8.8 lwc 123 */