黑马程序员-笔记-07-集合

来源:互联网 发布:js定义字符串数组 编辑:程序博客网 时间:2024/06/06 00:20

---------------------- ASP.Net+Android+IOS开发.Net培训、期待与您交流! ----------------------

java中的集合Map
     Map <K,V>
        ||-------------HashMap 
        ||-------------TreeMap
        ||-------------HashTable

       
 HashTable:底层hash表结构,不可以含有null(key)null(value),线程同步。
       HashMap:无序存储,可以含有null(key)null(value)。线程不同步。
       TreeMap:有序存储,可以含有null(key)null(value)。线程不同步。

 
如何遍历一个Map:
public class Play23<T> {public static void main(String[] args) {Map<Integer, String> map = new HashMap<Integer, String>();map.put(1, "a");map.put(2, "b");map.put(3, "c");                //通过Map.Entry,Entry是一个Map的一个内部类,他是描述Map键值对的关系。Set<Entry<Integer, String>> set = map.entrySet();Iterator<Entry<Integer, String>> ite = set.iterator();while (ite.hasNext()) {Entry<Integer, String> entry = ite.next();System.out.println(entry.getKey() + "::" + entry.getValue());}                 //通过KeySet();TreeMap<Character, Integer> trm = getNum("123123111");System.out.println("--------"+trm.get('c'));Iterator<Character> itr1 = trm.keySet().iterator();while (itr1.hasNext()) {char c = itr1.next();System.out.println(c + "::" + trm.get(c));}}        //取出一个字符串中,各个字符出现的次数。public static TreeMap<Character, Integer> getNum(String str) {TreeMap<Character, Integer> trm = new TreeMap<Character, Integer>();char[] cs = str.toCharArray();for (char c : cs) {if (trm.containsKey(c)) {trm.put(c, trm.get(c) + 1);} else {trm.put(c, 1);}}return trm;}}
java中集合的辅助工具。Collections,Arrays
1,sort()//对集合进行排序,可以制定比较器。
      1)  sort(List<T> list);
      2) sort(List<t>list,Comparator<? super T> c)
2,max() //同样根据指定的比较器查找最大的元素。
      public static <T extends Object & Comparable<? super T>> T max(Collection<? extends T> coll)
3, Collections.binarySearch//二分查找
       binarySearch(List<? extends Comparable<?super T>> list, T key)
4, fill(List<?super T> list,T obj) 使用指定元素替换指定列表中的所有元素。
5,replaceAll(List<T> list, T oldVal, T newVal) 使用别一个值替换列表中出现的所有某一指定值。
6,reverse(List<?> list)  反转指定列表中的元素的顺序。
7,reverseOrder//逆向排序。
     1) public static <T> Comparator <T> reverseOrder()
       返回一个比较器,它强行逆转实现了Comparable接口的对象collection的自然顺序。
     2)public static <T> Comparator<T> reverseOrder(Coparator<T> cmp);返回一个比较器,它强行逆转指定比较器的顺序。
     如果指定比较器为 null,则此方法等同于 reverseOrder()
8,synchronizedList(List<T> list) 集合中的对像虽然高效,但是线程不安全,要是被多线程操作时就会出问题,为解决这个问题,Collections   类中提供了加锁的方法。
9.public static void swap(List<?> list,int i,int j)
     在指定列表的指定位置处交换元素,即可交换两个元素的位置。适用于有角标的List的集合。
10,shuffle(List<?> list)  使用默认随机源对指定列表进行置换。就是随机重新排序原集合。



具体的方法不再总结,结合代码最快,这里只列出Arryas中一个将List转换为数组的方法,他有些重点。或者一些误区。

public class Test05 {public static void main(String[] args) {// 注意Integer数组,和int数组,再传给Arrays往list转换时的区别。// int[] 会被视为一个object,没有自动装箱成为Integer[]。Integer[] i1 = { 1, 2, 4, 5, 6, 7, 99 };// 转换成的List不能有删除和增加操作。List<Integer> al1 = Arrays.asList(i1);// al1.remove(1);//UnsupportedOperationExceptionSystem.out.println(al1);int[] i2 = { 1, 2, 4, 5, 6, 7, 99 };List<int[]> al2 = Arrays.asList(i2);System.out.println(al2);// List转换为数组Object[] iii = al1.toArray();System.out.println(iii.length);// 如果指定的数组长度,小于集合的size,他会默认扩展成成size大小// 如果大于,他会扩展成你要求的大小,并填空。Integer[] i3 = al1.toArray(new Integer[0]);System.out.println(i3.length);Integer[] i4 = al1.toArray(new Integer[100]);System.out.println(i4.length);int[][] i5 = al2.toArray(new int[0][]);System.out.println(i5.length);int i = Collections.binarySearch(al1, 5);System.out.println(i);//对List的增强行for循环,不能对数组进行移除操作。//iterator可以//listIterator支持所有操作。for (int j : al1) {if (j == 4) {//al1.remove(1);//改行代码抛出异常}}}}
无论是集合转换成为数组,还是数组转换成集合,他们都在一定程度上,保护了数据,他不希望,别人增加或者删除这些数据。


原创粉丝点击