黑马程序员——集合(下)

来源:互联网 发布:淘宝数据包怎么导出 编辑:程序博客网 时间:2024/05/01 18:34

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

MAP

|--Hashtable:底层是哈希表数据结构,不可以存入null键null值。该集合是线程同步的。jdk1.0.效率低。
|--Ha shMap:底层是哈希表数据结构,允许使用 null 值和 null 键,该集合是不同步的。将hashtable替代,jdk1.2.效率高。
|--TreeMap:底层是二叉树数据结构。线程不同步。可以用于给map集合中的键进行排序。

示例:

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)
isEmpty()


4,获取。
get(Object key)
size()
values()
entrySet()
keySet()

 

map集合的两种取出方式:
1,Set<k> keySet:将map中所有的键存入到Set集合。因为set具备迭代器。 所有可以迭代方式取出所有的键,在根据get方法。获取每一个键对应的值。 Map集合的取出原理:将map集合转成set集合。在通过迭代器取出。
2,Set<Map.Entry<k,v>> entrySet:将map集合中的映射关系存入到了set集合中,而这个关系的数据类型就是:Map.Entry,Entry其实就是Map中的一个static内部接口。为什么要定义在内部呢? 因为只有有了Map集合,有了键值对,才会有键值的映射关系。关系属于Map集合中的一个内部事物。而且该事物在直接访问Map集合中的元素。

 

集合方法方法类


Collections类:集合框架的工具类。
Collections:集合框架的工具类。里面定义的都是静态方法。
Collections.方法( );


Collections和Collection有什么区别?
Collection
是集合框架中的一个顶层接口,
它里面定义了单列集合的共性方法。它有两个常用的子接口,List:对元素都有定义索引。有序的。
可以重复元素。Set:不可以重复元素。无序。
Collections
是集合框架中的一个工具类。该类中的方法都是静态的
1提供的方法中有可以对list集合进行排序,二分查找等方法。
2通常常用的集合都是线程不安全的。因为要提高效率。
3如果多线程操作这些集合时,可以通过该工具类中的同步方法,将线程不安全的集合,转换成安全的。


Collections的常用方法:
sort:对List集合排序
public static <T extends Comparable<? super T>> void sort(List<T> list)
根据元素的自然顺序 对指定列表按升序进行排序。列表中的所有元素都必须实现 Comparable 接口

Collections.sort(list);
不可以给Set排序因为Set里面有TreeSet.用它也没什么用
如果出现了重复元素也可以排序,因为是数组结构有索引.


Collections.sort(list,new 比较器Comparator);
如果不喜欢默认的排序可以自定义比较器(比如最大长度

max:获取最大值
public static <T> T max(Collection<? extends T> coll,Comparator<? super T> comp)
根据指定比较器产生的顺序,返回给定 collection 的最大元素。collection 中的所有元素都必须可通过指定比较器相互比较
(也就是说,对于 collection 中的任意 e1 和 e2 元素,comp.compare(e1, e2) 不得抛出 ClassCastException)。
String max=Collection.max(list);
String max=Collection.max(list,new 比较器Comparator);
也可以放比较器.最大程度等

binarySearch:对list集合二分查找(必须是有序的)
public static <T> int binarySearch(List<? extends Comparable<? super T>> list, T key)
使用二分搜索法搜索指定列表,以获得指定对象。在进行此调用之前,必须根据列表元素的自然顺序
对列表进行升序排序(通过 sort(List) 方法)。如果没有对列表进行排序,则结果是不确定的。如果列
表包含多个等于指定对象的元素,则无法保证找到的是哪一个。

返回:
如果搜索键包含在列表中,则返回搜索键的索引;否则返回 (-(插入点) - 1)。
插入点 被定义为将键插入列表的那一点:即第一个大于此键的元素索引;如果列表中的所有元素都
小于指定的键,则为 list.size()。注意,这保证了当且仅当此键被找到时,返回的值将 >= 0。
Collection.sort(list);//对list集合进行排序
int index =Collection.binarySearch(list,"aaa");//查找"aaa"所在位置.返回插入点-1
System.out.println("index"+index);
(也可以加入比较器.比如长度排序,传比较器)
Collection.sort(list,new 比较器Comparator);//对list集合进行长度排序
int index =Collection.binarySearch(list,"aaa"new 比较器Comparator);//查找"aaa"所在位置.(按长度来了)返回插入点-1
System.out.println("index"+index);

fill:将集合中的部分元素替换成指定元素
public static <T> void fill(List<? super T> list,T obj)使用指定元素替换指定列表中的所有元素。
Collection.fill(list,"pp");

replaceAll:替换
public static <T> boolean replaceAll(List<T> list,T oldVal,T newVal)
使用另一个值替换列表中出现的所有某一指定值。更确切地讲,使用 newVal 替换 list 中
满足 (oldVal==null ? e==null : oldVal.equals(e)) 的每个 e 元素。(此方法对列表的大小
没有任何影响。)
Collection.replaceAll(list,"aaa","PP");//将"aaa"替换成"pp"

reverse:反转.
Collection.reverse(list);//将list反转

reverseOrder:逆转排序
返回一个比较器,它强行逆转实现了 Comparable 接口的对象 collection 的自然顺序。
TreeSet<String> ts=new TreeSet<String>(Collection.reverseOrder(new 比较器());

synchronizedList:给不同步.返回同步的
public static <T> List<T> synchronizedList(List<T> list)
返回指定列表支持的同步(线程安全的)列表。为了保证按顺序访问,必须通过返回的列表完成所有对底层实现列表的访问。
在返回的列表上进行迭代时,用户必须手工在返回的列表上进行同步:
synchronizedMap
public static <K,V> Map<K,V> synchronizedMap(Map<K,V> m)
synchronizedSet
public static <T> Set<T> synchronizedSet(Set<T> s)

swap:在指定列表的指定位置处交换元素。
public static void swap(List<?> list,int i,int j)
在指定列表的指定位置处交换元素。(如果指定位置相同,则调用此方法不会更改列表。)
Collection.swap(list,1,2);//将list集合的角标1和角标2互换

shuffle:把集合中的元素随机的排放
public static void shuffle(List<?> list)
使用默认随机源对指定列表进行置换。所有置换发生的可能性都是大致相等的。
Collection.shuffle(list);//将list集合的元素随机排放

Arrays:
用于操作数组的工具类里面都是静态方法
详情请查看API问的 java util Arrays


asList:将数组变成list集合

把数组变成list集合有什么好处?

可以使用集合的思想和方法来操作数组中的元素。
注意:将数组变成集合,不可以使用集合的增删方法。
因为数组的长度是固定。