参考资料参考 HashMap
类似 C++ 中的 STL 标准模板库,Java 也在 java.util 包中封装了一套常用数据结构及其算法,称为集合框架。所有的集合框架都包含如下内容:
接口:代表集合的抽象数据类型 ADT,如 Collection、List、Set、Map 等实现(类):集合接口的具体实现,是可重复使用的数据结构,例如:ArrayList、LinkedList、HashSet、HashMap。算法:实现集合接口的对象里的方法,可以执行一些有用的计算,例如:搜索和排序。这些算法具有多态性,相同方法在相似的接口上有着不同的实现。除了集合,Java 的集合框架也定义了几个 Map 接口和类。Map 里存储的是键/值对。尽管 Map 不是集合,但是它们完全整合在集合中。
Java 集合框架分为两大类:
Map 键值对的集合,包括SortedMapCollection 元素的集合,包括Set(包括 SortedSet)、List、Queue具体实现类,常用的有 ArrayList、LinkedList、HashSet、LinkedHashSet、HashMap、LinkedHashMap 等等。
有序列表,元素可重复。
无序集合,元素不可重复。
特殊的有序 Set,元素升序排列,还增加了次序的相关操作。
FIFO 先进先出队列。
存储键值对。需要同时指定键和值的类型 Map<k, v>。
特殊 Map,关键字升序排列。通常用于字典。
大多算法用于 List,min 和max 可以用于所有集合对象。
使 List 中的元素按照某种次序关系升序排列。
将元素按照自然次序排列,或者集合实现了 Comparable 接口附加 Comparator 对象做参数,规定比较规则,可实现反序或特殊规则可用于洗牌,每个次序出现的概率都是一样的。
需要引入 java.util.Arrays。 常用方法:
方法描述sort(type[] a)排序binarySearch()二分查找equals(type[] a, type[] b)数组比较fill(type[] a, type val)数组填充同一个值asList(T… a)将数组转为 ArrayListVector (集合框架的遗留类,不建议使用,线程安全)和 ArrayList(异步,效率高,建议用) :
实现了 Collection 接口不能存储基本数据类型,需要包在包装类中可以存储同类型的对象容量可以自动扩充Java 提供了线程安全集合 java.util.concurrent 包,有序集、队列,任何集合类通过使用同步包装器可以变成线程安全的:
List<E> synchArrayList = Collections.synchronisedList(new ArrayList<E>());Java 中的许多方法(例如 elements())返回 Enumeration 类型的对象,而不是返回集合类对象。
Enumeration 接口不能用于 ArrayList 对象,Iterator 接口可用于 ArrayList 对象和 Vector 对象。
Iterator 接口遍历对象的同时,可以删除对象。常用方法有:
hasNext():集合中是否还有下一个元素next():取集合的下一个元素remove():删除集合中最后调用 next() 返回的元素,注意不是从 Iterator 类中删除示例:
import java.util.*; class test { public static void main(String[] args) { String[] s = {"hello", "world", "haha"}; ArrayList al = new ArrayList<String> (java.util.Arrays.asList(s)); System.out.println("before: " + al); Iterator it = al.iterator(); while(it.hasNext()) { String tmp = (String)it.next(); System.out.println(tmp); if (tmp.length() > 4) { it.remove(); } } System.out.println("after: " + al); } }输出:
before: [hello, world, haha] hello world haha after: [haha]Map 中保存键值对,主要实现类是 HashMap。
常用的修改方法和查询方法有:
示例:
import java.io.*; import java.util.*; class test { public static void main(String[] args) { String[] arr = {"hello", "world"}; Map m = new HashMap(); System.out.println(m.isEmpty() ? "empty map" : "not empty map"); m.put("one", "this is a string"); m.put("two", arr); System.out.println(m.containsKey("one")); System.out.println(m); Iterator iter = m.entrySet().iterator(); while(iter.hasNext()) { Map.Entry entry = (Map.Entry)iter.next(); System.out.println("next : "+ entry.getKey() +" - "+entry.getValue()); } } }输出:
empty map true {one=this is a string, two=[Ljava.lang.String;@659e0bfd} next : one - this is a string next : two - [Ljava.lang.String;@659e0bfd转载于:https://www.cnblogs.com/kika/p/10851522.html
