黑马程序员-基础知识梳理6

来源:互联网 发布:mac美国官网价格 编辑:程序博客网 时间:2024/05/16 16:06
------- android培训java培训、期待与您交流! ----------
Map集合:该集合存储键值对,一对对往里存。要保证键的唯一性。
增:put(K key,V value)
删:clear(Object key)
判断:Contains(Object key)           return boolean;
isEmpty();
containValue(Object value)

获取:
get(Object key)

Map
|-----HashTable:底层是哈希表数据结构,不可以存入null键null值,该集合是线程同步的。
|-----HashMap底层是哈希表数据结构,允许使用null键和null值,集合是不同步的。效率更高
|-----TreeMap底层是二叉树数据结构,线程不同步。可以用于给map集合中的键进行排序和Set很像

Set底层就是用了Map集合

通过get方法的返回值是否为null判断一个键是否存在
put方法,当存放想相同键时,新的值会替代旧的值,并且返回原来 
旧值
 
map 集合的两种取出方式

第一种:keySet:将Map中所有的键都存入Set集合中,因为set具备迭代器,可以迭代方式取出所有键,在根据get方法,获取的一个键对应的值。
map.keySet();
// 先获取map集合的所有键的Set集合,keySet()
Set<String> keySet =map.keySet();
//有了Set集合,就可以获取其迭代器
Iterator<String> it = keySet.iterator();
while(it.hasNext()){
String key = it.next();
String value = map.get(key);
System.out.println(key+"........"+value);
}

第二种方法 Set<Map.Entry<k,v>> entry:  将Map集合中的映射关系取出,存入到Set集合中,而这个关系的数据类型就是Map.Entry
将Map集合中的映射关系 
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);
}

什么时候使用map集合?
当发现有映射关系时,可以选择map集合。因为map集合中存放就是映射关系。

Collection工具类 
sort(List<T> list) 
          根据元素的自然顺序 对指定列表按升序进行排序。
sort(List<T> list, Comparator<? super T> c) 
          根据指定比较器产生的顺序对指定列表进行排序。
max(Collection<? extends T> coll, Comparator<? super T> comp) 
          根据指定比较器产生的顺序,返回给定 collection 的最大元素。
public static <T> int binarySearch(List<? extends Comparable<? super T>> list, T key)
使用二分搜索法搜索指定列表,以获得指定对象。
返回:如果搜索键包含在列表中,则返回搜索键的索引;否则返回 (-(插入点) - 1) 
fill(List<? super T> list, T obj) 
          使用指定元素替换指定列表中的所有元素。
replaceAll(List<T> list, T oldVal, T newVal) 
          使用另一个值替换列表中出现的所有某一指定值。 
reverse(List<?> list) 
          反转指定列表中元素的顺序。
reverseOrder() 
          返回一个比较器,它强行逆转实现了 Comparable 接口的对象 collection 的自然顺序 
synchronizedList(List<T> list) 
          返回指定列表支持的同步(线程安全的)列表。 
swap(List<?> list, int i, int j) 
          在指定列表的指定位置处交换元素。
shuffle(List<?> list) 
          使用默认随机源对指定列表进行置换。 

Arrays工具类:
asList(T... a) 
          返回一个受指定数组支持的固定大小的列表。
  List<String> stooges = Arrays.asList("Larry", "Moe", "Curly");
int[] num = { 3, 2, 5 };
List<int[]> li = Arrays.asList(num);
System.out.println(li);
Integer[] nums = { 3, 4, 5 };
List<Integer> lii = Arrays.asList(nums);
System.out.println(lii);
/*
* 如果数组中的元素都是对象,那么变成集合时,数组中的 元素就直
* 接转成集合中的元素。如果数组中的元素都是基本数据类型
* 那么会将该数组做为集合中的元素存在。
*/

String[] arr1 = { "arr1u", "dsds", "sdas" };
List<String> list = Arrays.asList(arr1);
System.out.println(list);
// list.add("add")
// 将数组变成list集合,不可以使用集合的增删方法,因为
// 数组的长度是固定的。
// contains get indexOf subList() 这些方法是可以用的
// 如果增删会出异常

 * 高级for循环
 * 格式:
 * for(数据类型 变量名 : 被遍历的集合(collection)或者数组)
 * {}
 * 对集合进行遍历。
 * 只能获取集合元素,但是不能对集合进行操作。
 * 迭代器除了遍历,还可以进行remove集合中元素的动作;
 * 如果是用ListIterator,还可以继在遍历过程中对集合进行增删改查的动作。
 * 传统for 和高级for有什么区别呢?
 * 高级for有一个局限性,必须有被遍历的目标
 * 建议在遍历数组的时候,还是希望使用传统for,因为传统for可以定义角标 

 可变参数,其实就是上次数组的简写形式,不用每次都手动
* 建立数组对象,只要将要操作的元素作为参数传递即可。
* 隐式将这些参数封装成数组。
* */
public static void show(String str,int ... arr){
System.out.println(arr);
System.out.println(arr.length);
} 
  在使用时:可变参数一定要定义在参数列表的最后面

静态导入:
 * 
 * 当类名重名时,需要指定具体的包名
 * 当方法重名时,制定具备所属的对象或者类
 */
import static java.lang.System.*;//导入里面所有的静态成员
system.out.println(index);可以改成
out.println(index);这样了 
import static java.util.Arrays.*;//导入Arrays这个类中的所有静态成员 
int index =binarySearch(arr, 1);//不用写Arrays.xxxxx 
------- android培训java培训、期待与您交流! ----------

原创粉丝点击