java学习笔记07

集合框架

集合collection

常用方法:

add(Object obj),addAll(Collection),size(),isEmpty(),contains(),containsAll(), remove(Object obj),removeAll(),hashcode(),equals(),toArray()

addAll是把Collection中的所有元素添加进去,add是把Object当作一个整体添加

集合与数组的相互转换

集合 --》 数组 :toArray()

数组 --》 集合 :调用Arrays的静态方法asList()

向Collection中添加元素的要求:

要求元素所属的类一定要重写equals() !

原因:

因为Collection中的相关方法(contains()/remove())在使用时,需要调用元素所在类的equals()

    public void test3(){
        Collection coll = new ArrayList();

        coll.add("AA");
        coll.add(123); // autoboxing
        coll.add(new Object());
        coll.add(new Person("Tom",12));

        //delete
        //coll.clear();
        System.out.println(coll); //[]
        System.out.println(coll.size()); //0

        coll.remove(new Person("Tom",12)); //delete when you overwrite equals() in Person class
        System.out.println(coll); //[AA, 123, java.lang.Object@7506e922]
    }

Iterator(迭代器)

作用:用来遍历集合元素

遍历方法

        Collection coll = new ArrayList();

        coll.add("AA");
        coll.add(123); // autoboxing
        coll.add(new Object());
        coll.add(new Person("Tom",12));
        
        //get Iterator
        Iterator iterator = coll.iterator();
        //method1
        System.out.println(iterator.next());
        System.out.println(iterator.next());
        System.out.println(iterator.next());
        System.out.println(iterator.next());
        //System.out.println(iterator.next()); error when exceed the element number in collection
        //method2
        for(int i=0 ;i< coll.size();i++){
            System.out.println(iterator.next());
        }
        //method3 recommend
        while(iterator.hasNext()){
            System.out.println(iterator.next());
        }

增强for循环

作用:用来遍历集合,数组

for(元素类型 变量名 : 要迭代的对象)

        for(Object obj : coll){
            System.out.println(obj);
        }
        int[] arr = new int[]{1,2,3,4,5};
        for(int i : arr){
            System.out.println(i);
        }

List

接口特点:用于存储有序的,可以重复的数据 ---》使用list替代数组,动态数组

常用方法:

collection中的方法,remove(int index),set(int index,Object ele),get(int index),add(int index,Collection eles )

实现类:ArrayList(主要实现类)添加数据,查找数据效率较高。插入删除数据效率较低

,Vector(古老不太用了),

LinkedList,插入删除数据效率较高,添加查找数据效率低

创建

List list = new ArrayList()

Set

接口特点:用于存储无序的,不可重复的数据

常用方法:即collection中的15个方法

实现类:HashSet(主要实现类)

LinkedHashSet(HashSet是HashSet的子类)

TreeSet

无序性: 数据存放位置无序,根据哈希值计算的其在数组中的存储位置。

不可重复性:判断hashCode()得到的哈希值与equals()得到的结果。哈希值与equals()结果都为True则认为相同。为什么要判断两个,因为不同的元素哈希值是有可能相同的

TreeSet使用

特性:底层使用红黑树存储,可以按照添加的元素的指定的属性的大小进行遍历

底层数据结构:红黑树

添加元素的要求:必须是同一个类型的对象,否则汇报ClassCastException

判断数据是否相同:不在考虑hashcode()和equals()方法了,所以添加到TreeSet中的元素不必要重写这两个方法。而是采用compareTo()或compare()返回值来比较所以必须要实现。若返回值为0,由于红黑树性质无法放入

Map

特点:存储一堆一堆的数据 (类似python中的字典)

实现类:HashMap:(主要实现类)

LinkedHashMap:是HashMap的一个子类,在其基础上增加了双向链表用于记录添加元素的顺序

TreeHashMap:使用红黑树存储

HashTable:古老实现类

Properties

HashMap

特点

key不可重复,无序,所有的key就构成一个Set集合 ---》key所在类要重写hashCode()和equals()

value之间可重复,无序,所有value构成一个collection集合。---》value所在类要重写equals()

key和value构成一个整体 entry。

常用方法

增:put(Object key,Object value),putAll(Map m)

删:remove(Object key)

改:put(Object key,Object value)

查:get(Object key)

长度:size()

遍历:

遍历key集:keySet()

遍历value集:values()

遍历entry集:entrySet()

Collections工具类

collections是一个操作Set,List和Map等集合的工具类

排序操作:

reverse(List):反转List中元素的顺序

shuffle(List):对List集合元素进行随机排序

sort(List):按自然顺序对List集合元素升序排序

sort(List,Comparator):根据指定的Comparator产生的顺序对List集合元素进行排序

swap(List,int,int):将指定List集合的i处元素和j处元素进行交换

查找:

max(Collection):自然排序

max(Collection,Comparator):指定排序

min(Collection)

min(Collection,Comparator)

frequency(Collection,Object):找集合中指定元素出现的次数

复制

//copy(List dest,List src):将src中的内容复制到dest中

//错误写法,会报错 要求dest大小大于src
List src = new Array.asList(43,45,6,3,5,324,22);
List dest = new ArrayList();
Collections.copy(dest,src);

//正确写法
List src = new Array.asList(43,45,6,3,5,324,22);
List dest = new Array.asList(new Object[src.size()]);
Collections.copy(dest,src);

unmodifiableList(List):返回一个不能修改的试图 简单来说就是返回一个和输入一样的List但这个List只能读不能写

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值