黑马程序员_集合3(HashMap,HashTable,TreeMap,Arrays,Collections等)

来源:互联网 发布:淘宝diy动铁耳机 编辑:程序博客网 时间:2024/05/20 07:54

--------- android培训java培训、期待与您交流!---------

一.Map概述

1.Map集合:该集合存储键值对,一对一对往里存,而且要保证键的唯一性。
                    Map和Set很像,事实上,Set底层就是使用了Map集合的结构。
2.Map共性方法:
  1)添加
      put(K key,V value),
      putAll(Map<?extends K,?extends V> m)
 2) 删除
  clear()
remove(Object key)
  3) 判断
   containsvalue(Object value)
  containsKey(Object key)
  4)
  获取
   get(Object key)
   size()
   values()
   entrySet()
   keySet()
 3.Map的子类
  1)HashTable 底层是哈希表结构,不可以存入null键和null值,该集合是线程同步的,效率稍低。
  2)HashMap  :底层是哈希表结构,允许使用null键和null值,该集合是不同步的,.效率高。
  3)  TreeMap:  底层是二叉树结构,线程不同步,可以用于给Map集合中的键进行排序。
 
Map集合的两种取出方式:
 1.keySet  : 将Map集合中的键存入到Set集合,因为Set具备迭代取出功能,所以可以迭代取出所有的键,再使用     Map的get方法,获取键所对应的值。
代码示例:
Map<String,String> map = new HashMap<String,String>();map.put("01","zhangsan1");map.put("02","zhangsan2");map.put("03","zhangsan3");Set<String> keySet = map.keySet();Iterator it = keySet.iterator();while(it.hasNext()){String key = it.next();String value = map.get(key)System.out.println("key"+key+"value"+value);}

          
2.entrySet :将Map集合中的键和值存入到Set集合中,    而这个关系的数据类型就是:Map.Entry。
代码示例:
Map<String,String> map = new HashMap<String,String>();map.put("01","zhangsan1");map.put("02","zhangsan2");map.put("03","zhangsan3");Set<Map.Entry<String,String>> entrySet  = map.entrySet();Iterator<Map.Entry<String,String>> it =  entrySet.iterator();while(it.hasNext()){    Map.Entry<String,String,> me = it.next();     String key =  me.getKey();      String value = me.getValue();     System.out.println(key+":"+value);}



二.Collections集合工具


1.如果要往集合中存一些元素,但不需要保证唯一,这时用List集合,
但想对这个集合排序,但能排序的Tree是Set集合中的,这时就用到了Collections,Collections类是专门操作集合的工具类。
2.sort()方法的代码分析:
class Student
{
}
ArrayListlist = new ArrayList();
list.add(new Student());
public static <T extends Comparable<? super T>> void sort(List<T> list)
{
//对泛型进行限定,T必须是Comparable的子类,也就是说自身有比较性。 T代表学生
//一般Comparable后面接收的都是super,因为可以接收很多子类进来,用父类方法比。
}
3.sort()
1)  sort(List<T> list);
2) sort(List<t>list,Comparator<? super T> c)
4,max() 
1)public static <T extends Object & Comparable<? super T>> T max(Collection<? extends T> coll)
5 Collections.binarySearch
 binarySearch(List<? extends Comparable<?super T>> list, T key)
6 fill(List<?super T> list,T obj) 使用指定元素替换指定列表中的所有元素。
7,replaceAll(List<T> list, T oldVal, T newVal) 使用别一个值替换列表中出现的所有某一指定值。
8reverse(List<?> list)  反转指定列表中的元素的顺序。
9.reverseOrder
1) public static <T> Comparator <T> reverseOrder()
 返回一个比较器,它强行逆转实现了Comparable接口的对象collection的自然顺序。
2)public static <T> Comparator<T> reverseOrder(Coparator<T> cmp);返回一个比较器,它强行逆转指定比较器的顺序。
如果指定比较器为 null,则此方法等同于 reverseOrder()
10 synchronizedList(List<T> list) 集合中的对像虽然高效,
但是线程不安全,要是被多线程操作时就会出问题,为解决这个问题,Collections类中提供了加锁的方法。
11.public static void swap(List<?> list,int i,int j)
在指定列表的指定位置处交换元素,即可交换两个元素的位置。适用于有角标的List的集合。
12shuffle(List<?> list)  使用默认随机源对指定列表进行置换。就是随机重新排序原集合。


三 Arrays数组工具


1..toString(Object[] a) :
返回指定数组内容的字符串表示形式。
2.asList(T... a) :
1)public static <T> List<T> asList(T... a) 返回一个受指定数组支持的固定大小的列表,将数组变成list集合。
2)把数组变成list集合有什么好处?
可以使用集合的思想和方法来操作数组中的元素。
3)注意:
将数组变成集合,可以用contains(),get(),indexOf(),subLIst().
但不可以使用集合的增删方法。因为数组的长度是固定的。
如果你增删,就会发生UnsupportedOperationExceoption(不支持操作)异常。
4)如果数组中的元素都是对象,那么变成集合时,数组中的元素就直接转成集合中的元素。
如果数组中的元素都是基本数据类型,那么会将该数组作为集合中的元素存在。
 


 


 
原创粉丝点击