网站建设时间计划,wordpress mysql 链接,徐州建设工程招投标官方网站,京东网站开发多少钱HashSet HashSetE泛型类在数据组织上类似于数学上的集合#xff0c;可以进行“交”、“并”、“差”等运算。HashSetE泛型类创建的对象称为集合#xff0c;如#xff1a;HashSetE set HashSetString();那么set就是一个可以存储string类型… HashSet HashSetE泛型类在数据组织上类似于数学上的集合可以进行“交”、“并”、“差”等运算。 HashSetE泛型类创建的对象称为集合如 HashSetE set HashSetString(); 那么set就是一个可以存储string类型数据的集合set可以调用add(String s)方法将string类型的数据添加到集合中。添加到集合中的数据称为集合的元素。集合不允许有相同的元素。也就是说如果b已经是集合中的元素那么执行add(b)的操作是无效的。集合对象的初始容量是16字节装载因子是0.75。也就是说如果集合添加的元素超过总容量的75%是集合的容量将增加1倍。 相关运算 并运算boolean addAll(HashSet) 交运算boolean retainAll(HashSet) 差运算boolean remainAll(HashSet) 参数指定的集合必须与当前集合是同种类型的集合否则上述方法返回的类型是false。 HashSetE泛型类实现了泛型接口SetE而SetE接口是CollectionE接口的子接口。HashSetE类中的绝大部分方法都是接口方法的实现。编程时可以使用接口回调技术即把HashSetE对象的引用赋值给CollectionE接口变量或SetE接口变量那么接口就可以调用类实现的接口方法。 HashMap HashMapK,V对象成为散列映射对象。散列映射用于存储键-值数据对允许把任何数量的键-值数据存储在一起。键不可以可重复。如果出现两个数据项的键相同那么先前散列映射中的键-值对将被替换。散列映射在它需要更多存储容量是会自动增大容量。例如如果散列映射的装载因子是75%时它就自动把容量增加到原始容量的2倍。对于数组和链表这两种数据结构如果要查找它们存储的某个特定的元素却不知道它们的位置就需要从头开始访问元素知道找到匹配的为止如果数据结构中包含很多元素就会浪费时间。这时最好使用散列映射来存储要找的数据以便检索时可以减少检索的开销。 HashMapK,V泛型类创建的对象称为散列映射如 HashMapK,V hash HashMapString,Student(); 那么hash就可以存储键-值对数据其中的键必须是一个String对象键对应的值必须是Student对象。hash可以调用 public V put(K key, V value)方法将键-值对存储在散列映射中同时返回键所对应的值。 遍历散列映射的方法有如下四种public static void main(String[] args) {MapString, String map new HashMapString, String();map.put(1, value1);map.put(2, value2);map.put(3, value3);// 第一种普遍使用二次取值System.out.println(通过Map.keySet遍历key和value);for (String key : map.keySet()) {System.out.println(key key and value map.get(key));}// 第二种System.out.println(通过Map.entrySet使用iterator遍历key和value);IteratorMap.EntryString, String it map.entrySet().iterator();while (it.hasNext()) {Map.EntryString, String entry it.next();System.out.println(key entry.getKey() and value entry.getValue());}// 第三种推荐尤其是容量大时System.out.println(通过Map.entrySet遍历key和value);for (Map.EntryString, String entry : map.entrySet()) {System.out.println(key entry.getKey() and value entry.getValue());}// 第四种System.out.println(通过Map.values()遍历所有的value但不能遍历key);for (String v : map.values()) {System.out.println(value v);}
}HashMapE泛型类是实现泛型接口MapE。 TreeSet TreeSetE类是实现Set接口的类。 TreeSetE泛型类创建的对象称为树集如 TreeSetStudent tree TreeSetStudent(); 那么tree就是一个可以存储Student对象的集合tree可以调用add(Student s)方法将Student对象添加到树集中。树集采用树结构存储数据树集节点的排列和链表不同不按添加的先后顺序顺序排列。树集采用add()方法增加节点节点会按其存放的数据的“大小”顺序一层一层地依次排序同一层的节点按“大小”顺序递增排列下一层的比上一层的小。树集是一个有序集合。 TreeMap TreeMap类实现了Map接口TreeSet类提供了按排序顺序存储键-值对的有效手段。TreeMap保证它的元素按key升序排列。 构造函数有2种 TreeMapK,V()按照关键字key的大小顺序来对键-值对进行升序排序key的顺序是按其字符串表示的字典顺序。 TreeMapK,V(ComparatorK comp)关键字key的大小顺序按照Comparator接口规定的大小顺序对树映射中的键-值对进行排序即可以升序也可以降序取决于里面重写的方法。 下面是一个排序的例子 package test;import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.TreeMap;public class Sort {public static void main(String[] args) {System.out.println(开始);Person person1 new Person(马先生, 220181);Person person2 new Person(李先生, 220193);Person person3 new Person(王小姐, 220186);MapNumber, Person map new HashMapNumber, Person();map.put(person1.getIdCard(), person1);map.put(person2.getIdCard(), person2);map.put(person3.getIdCard(), person3);System.out.println(由HashMap类实现的Map集合无序);for (IteratorNumber it map.keySet().iterator(); it.hasNext();) {// 遍例集合Person person map.get(it.next());System.out.println(person.getIdCard() person.getName());}System.out.println(由TreeMap类实现的Map集合键对象升序);TreeMapNumber, Person treeMap new TreeMapNumber, Person();treeMap.putAll(map);for (IteratorNumber it treeMap.keySet().iterator(); it.hasNext();) {// 遍例集合Person person treeMap.get(it.next());System.out.println(person.getIdCard() person.getName());}System.out.println(由TreeMap类实现的Map集合键对象降序);TreeMapNumber, Person treeMap2 new TreeMapNumber, Person(Collections.reverseOrder());// 初始化为反转排序treeMap2.putAll(map);for (Iterator it treeMap2.keySet().iterator(); it.hasNext();) {// 遍例集合Person person (Person) treeMap2.get(it.next());System.out.println(person.getIdCard() person.getName());}System.out.println(结束);}
}class Person {private String name;private long idCard;public Person(String name, long idCard) {this.name name;this.idCard idCard;}public long getIdCard() {return idCard;}public void setIdCard(long idCard) {this.idCard idCard;}public String getName() {return name;}public void setName(String name) {this.name name;}
}输出结果为开始
由HashMap类实现的Map集合无序
220186 王小姐
220181 马先生
220193 李先生
由TreeMap类实现的Map集合键对象升序
220181 马先生
220186 王小姐
220193 李先生
由TreeMap类实现的Map集合键对象降序
220193 李先生
220186 王小姐
220181 马先生
结束TreeMap也可以用一个简单的方法使它按键key降序排列 TreeMapDouble, double[] sortMap new TreeMapDouble, double[](span stylecolor:#ff0000;Collections.reverseOrder()/span);// 初始化为翻转排序 所以如果map需要按键排序把键-值对放在TreeMap即可。 map中按值排序则需要重写Comparator方法如下的例子 ListMap.EntryInteger, Double entrySet newArrayListMap.EntryInteger, Double(map.entrySet());System.out.println(排序前的特征值: entrySet);Collections.sort(entrySet,new span stylecolor:#ff0000;Comparator/spanMap.EntryInteger, Double() {public int compare(EntryInteger, Double o1,EntryInteger, Double o2) {return o2.getValue().compareTo(o1.getValue());//span stylecolor:#ff0000;此处对象o1和对象o2的先后顺序可决定是按升序还是按降序排序/span}}); Map常用操作 1) 添加操作 V put(K key, V value):如果key已存在在关联后返回替换前该key对应的value值,如果不存在则返回null; void putAll(Map t):将来自特定映像的所有元素添加给该映射。 2) 删除操作 V remove(Object key):从此映射中移除指定键的映射关系如果存在不存在则返回null; void clear() :从此映射中移除所有映射关系. 3) 查询操作 V get(key): 获得与关键字key相关的值并且返回与关键字key相关的对象如果没有该关键字则返回null;判断key是否存在可以通过返回值是否等于null boolean containsKey(key): 判断映像中是否存在关键字key; boolean containsValue(Object value): 判断映像中是否存在值value; int size(): 返回当前映像中映射的数量; boolean isEmpty(): 判断映像中是否有任何映射. Collection values():返回映像中所有value值的集由于值多个用Collection集合对其操作可以使用Collection基本方法. HashMap和HashTable的区别 1) HashTable底层是哈希表数据结构hash值直接使用对象的hashCode不可以存入null键和null值hash数组默认大小是11增加的方式是 old*21线程同步在多线程并发的环境下可以直接使用HashtableJDK1.0效率低 2) HashMap继承自Dictionary类底层是哈希表数据结构重新计算hash值可以存入null键和null值hash数组的默认大小是16而且一定是2的指数线程不同步在多线程并发的环境下要自己增加同步处理JDK1.2效率高。 一般情况下HashMap能够比Hashtable工作的更好、更快主要得益于它的散列算法以及没有同步。应用程序一般在更高的层面上实 现了保护机制而不是依赖于这些底层数据结构的同步因此HashMap能够在大多应用中满足需要。推荐使用HashMap如果需要同步可以使用同步工具类将其转换成支持同步的HashMap。 LinkedHashMap保存了记录的插入顺序在用Iterator遍历LinkedHashMap时先得到的记录肯定是先插入的.也可以在构造时用带参数按照应用次数排序。在遍历的时候会比HashMap慢不过有种情况例外当HashMap容量很大实际数据较少时遍历起来可能会比LinkedHashMap慢因为LinkedHashMap的遍历速度只和实际数据有关和容量无关而HashMap的遍历速度和他的容量有关。 有并发访问的时候用ConcurrentHashMap效率比用锁的HashMap好 功能上可以但是毕竟ConcurrentHashMap这种数据结构要复杂些如果能保证只在单一线程下读写不会发生并发的读写那么就可以试用HashMap。ConcurrentHashMap读不加锁 —————————————————————————————————————————————————————— 写博经验尚浅请各位多多指教。