java第四课笔记 集合、泛型

    • 集合
      • 集合属于一种存放数据的不定长容器
      • Collection接口和Map接口 都实现于Iterator接口
      • Collection接口 放入集合中的元素默认置为Object类型(泛型)
    • List接口实现类 线性存储- 有顺序
      • ArrayList 相似数组结构, 普通的for循环便可遍历
        • 查询效率高, 但线程不安全
        • 底层是用数组实现的
        • add("a") 添加元素 add(1,"a") 在1位置添加元素
        • get(1) 获取1位置的元素
        • indexOf("a") a第一次出现的位置
        • remove(0) 去掉0位置的元素, 返回此元素值
        • set(0, "b") 将0位置的元素替换为"b"
        • contains("b") 返回boolean 是否包含
        • 遍历
          // for循环 ​操做集合for(int i=0;i<a.size();i++) { a.remove("a");}for(String s : al) { al.set(0, "ele");}
    • Set接口实现类 不能有重复元素
      • HashSet 无序性
        • HashSet中存放的元素位置是根据元素的hashCode值放置的
        • 集合元素能够为null
        • 放入元素时, 应该保证equals返回true状况下, 尽可能保证hashCode值也同样, 重写hashCode方法
        • 重写hashCode方法
        • 1.8版本后, 用的是数组+链表+红黑树
      • LinkedHashSet 有序
        • 存入什么顺序, 遍历打印就是什么顺序
        • List集合 底层以链表形式存放位置 有序
        • HashSet集合 底层以哈希码形式存放位置 无序
        • LinkedHashSet 底层既有hashCode值来放置位置 又有链表维护元素的秩序【打印的结果与输入的结果一致】
      • TreeSet 可排序
        • 默认升序
        • 实现了Comparable接口, 重写了 int compareTo(Object o)方法, 每次添加元素时, 调用此方法和集合内的元素进行比较
        • 自定义类时, 须要实现Comparable接口, 并在这个类中重写compareTo方法
        • 绑定比较器 定制排序
          class MyComparator implements Comparator<TreeSetBean2>{ public int compare(TreeSetBean2 o, TreeSetBean2 o2) { return o.age-o2.age; }}main方法中Set<TreeSetBean2> st = new TreeSet<TreeSetBean2>(new MyComparator());绑定比较器, 根据对象的number属性比较
        • 重写equals方法
          public boolean equals(Object obj) { if(this==obj) { return true; }else { if(obj instanceof Worker) { Worker tb = (Worker)obj; if(this.name.equals(tb.name)) { return true; } } } return false;}
        • 重写hashCode方法
          • byte,short,char,int 转换成int hashCode = (int)f;
          • long转换成int hashCode = (int)((f>>>32)^f)
          • float转换成int hashCode = Float.floatToIntBits(f)
          • double转换成int 先转换成long,再转换成int类型
            • long i =Double.doubleToLongBits(f)
          • 普通的引用类型 hashCode = f.hashCode();
          • 若是两个属性(f1,f2)参与equals比较 equals中, 条件用&&链接 hashCode中, 属性值全转化成 int相加
        • 重写compareTo方法
          public int compareTo(Worker o) { if(this.age>o.age) { return -1; }else if(age<o.age) { return 1; }else { return 0; }}
          • 本身控制条件,达到定制排序的一种方法
          • return (x<y) ? -1 ; ( (x==y) ? 0 ; 1) ;
    • Map接口实现类 key- value 若是value都是null,就变成List集合了
      • HashMap key部分也须要重写equals和hashCode方法
        HashMap<String,Integer> h = new HashMap<String, Integer>();h.put("语文", 90); //{语文=90}键值对h.put("语文", 88); //键相等,会覆盖值h.put("数学", 87);h.put("英语", 85);Integer i = h.get("英语"); //根据key值获取value值int c = hm.size(); //集合大小Set<String> s = h.keySet(); //获取集合中全部键 [语文,数学,英语]Collection<Integer> c = h.values(); //获取全部value值 [88,87,85]Integer i2 = h.remove("语文"); //根据key值移除 键值对h.clear(); //清除全部键值对 boolean b = h.containsKey("数学"); //判断是否包含某个键boolean b1 = h.isEmpty(); //判断是否为空Set<Map.Entry<String, Integer>> se = h.entrySet();System.out.println(se);h.replace("数学",100);
        • 遍历
          Map集合中常见遍历方式 遍历存放key值的SetSet<String> ss = map.keySet();再遍历 遍历存放value值的CollectionCollection<String> c = map.values();再遍历 遍历存放键值对的SetSet<Map.Entry<String, String>> ms = 8mp2.entrySet();
      • TreeMap
    • Iterator迭代器
      • iterator()返回的是Collection元素进行迭代的 迭代器
      • *必须与Collection结合绑定才能使用
      • Iterator 方法
        Collection c = new ArrayList( );c.add("abc");c.add("ooo");c.add("sss");//c.size( )=3Iterator i = c.iterator( );//*绑定while(i.hasNext( )) { //遍历期间不能用集合c直接操做 Object s = i.next( ); System.out.println(s);}
        • boolean hasNext( ); 检查集合中是否有元素须要遍历
        • Object next( ); 获取遍历到的当前元素
        • void remove( ); 将迭代器中返回的元素删除
      • ListIterator双向迭代器
        只能遍历ListArrayList<String> a = new ArrayList<String>();a.add("a");a.add("b");a.add("c");ListIterator i = a.listIterator( ); //绑定while(i.hasNext( )) { //从前日后迭代 Object str = i.next(); System.out.println(str);}while(i.hasPrevious( )) { //从后往前迭代 Object str = i.previous(); System.out.println(str);}
    • 泛型
      • 类名<具体的类型> 变量 = new 类名<>( );
      • 自定义泛型类和自定义泛型方法
        • 格式: 常见的表示泛型的字母 E V T K
          class Books<T>{ private T date; // T 为自定义的类型 Books(T date){ this.date = date; } public T getDate( ) { return date; }}
    • Collections工具类
      • ArrayList<Integer> a = new ArrayList<Integer>();
      • a.add("5"); //正常添加 [5]
      • Collections.addAll(a,"10","11","25","77"); //添加一大堆[5,10,11,25,77] 也能够传集合
      • boolean contains(Object o) //包含
      • containsAll(Collection<?> c) //包含全部
      • int i = Collections.binarySearch(a, 10); //二分法查找
      • Collections.swap(ai, 0, 4); //交换数据 [77,10,11,25,5]
      • boolean isEmpty(); //是否空了
      • .toArray(); //转化成数组
      • Collections.reverse(temp); //反转集合
相关文章
相关标签/搜索