刘意JavaSE 学习笔记 Day15-Day18——集合(Collection, Set, List, Map, Queue, 就是对数据结构的封装)

6【重点,用得最多】集合(Collection, Set, List, Map, Queue, 就是对数据结构的封装)

day15 Collection,List

day16 List三个子类

day17 Set两个子类: HashSet,TreeSet

day18 Map

以上花4天时间

 

第十二天

Collection

 

迭代器(Collection特有的遍历方式)    Iterator是个接口

//存储字符串并遍历
			import java.util.Collection;
			import java.util.ArrayList;
			import java.util.Iterator;
			
			public class CollectionDemo {
				public static void main(String[] args) {
					//创建集合对象
					Collection c = new ArrayList();
					
					//创建并添加元素
					c.add("hello");
					c.add("world");
					c.add("java");
					
					//遍历集合
					Iterator it = c.iterator();
					while(it.hasNext()) {
						String s =(String) it.next();
						System.out.println(s);
					}
				}
			}

List集合的特有遍历功能:由size()和get()结合。

//创建集合对象
					List list = new ArrayList();
					
					//创建并添加元素
					list.add("hello");
					list.add("world");
					list.add("java");
					
					//遍历集合
					Iterator it = list.iterator();
					while(it.hasNext()) {
						String s =(String) it.next();
						System.out.println(s);
					}
					System.out.println("----------");
					
					for(int x=0; x<list.size(); x++) {
						String s =(String) list.get(x);
						System.out.println(s);
					}

List的子类特点(面试题)
        ArrayList
            底层数据结构是数组,查询快,增删慢。
            线程安全,效率高。
        Vector
            底层数据结构是数组,查询快,增删慢。
            线程安全,效率低。
        LinkedList
            底层数据结构是链表,查询慢,增删快。
            线程不安全,效率高。

 

第十三天

ArrayList
        A:没有特有功能需要学习
        B:案例
            a:ArrayList存储字符串并遍历
            b:ArrayList存储自定义对象并遍历

Vector
        A:有特有功能
            a:添加
                public void addElement(E obj)        --    用add()更简单
            b:获取
                public E elementAt(int index)        --    用get()更简单
                public Enumeration<E> elements()    --  用iterator()更简单
        B:案例
            a:Vector存储字符串并遍历
            b:Vector存储自定义对象并遍历

LinkedList
        A:有特有功能    
            a:添加
                addFirst()
                addLast()
            b:删除
                removeFirst()
                removeLast()
            c:获取
                getFirst()
                getLast()
        B:案例
            a:LinkedList存储字符串并遍历
            b:LinkedList存储自定义对象并遍历

泛型概述:是一种把明确类型的工作推迟到创建对象或者调用方法的时候才去明确的特殊的类型。
格式:
        <数据类型>
        注意:该数据类型只能是引用类型。

增强for循环:是for循环的一种,十分常用,可以用来代替iterator.

(1)格式:
        for(元素的数据类型 变量名 : 数组或者Collection集合的对象) {
            使用该变量即可,该变量其实就是数组或者集合中的元素。
        }

(2)好处:
        简化了数组和集合的遍历

(3)弊端
        增强for循环的目标不能为null。建议在使用前,先判断是否为null。

 

第十四天

Collection集合总结(掌握)

Collection
        |--List    有序,可重复
            |--ArrayList
                底层数据结构是数组,查询快,增删慢。
                线程不安全,效率高
            |--Vector
                底层数据结构是数组,查询快,增删慢。
                线程安全,效率低
            |--LinkedList
                底层数据结构是链表,查询慢,增删快。
                线程不安全,效率高
        |--Set    无序,唯一
            |--HashSet
                底层数据结构是哈希表。
                如何保证元素唯一性的呢?
                    依赖两个方法:hashCode()和equals()
                    开发中自动生成这两个方法即可
                |--LinkedHashSet
                    底层数据结构是链表和哈希表
                    由链表保证元素有序
                    由哈希表保证元素唯一
            |--TreeSet
                底层数据结构是红黑树。
                如何保证元素排序的呢?
                    自然排序
                    比较器排序
                如何保证元素唯一性的呢?
                    根据比较的返回值是否是0来决定
                    

针对Collection集合我们到底使用谁呢?(掌握)

唯一吗?
        是:Set
            排序吗?
                是:TreeSet
                否:HashSet
        如果你知道是Set,但是不知道是哪个Set,就用HashSet。
            
        否:List
            要安全吗?
                是:Vector
                否:ArrayList或者LinkedList
                    查询多:ArrayList
                    增删多:LinkedList
        如果你知道是List,但是不知道是哪个List,就用ArrayList。
    
    如果你知道是Collection集合,但是不知道使用谁,就用ArrayList。
    
    如果你知道用集合,就用ArrayList。

在集合中常见的数据结构(掌握)

    ArrayXxx:底层数据结构是数组,查询快,增删慢
    LinkedXxx:底层数据结构是链表,查询慢,增删快
    HashXxx:底层数据结构是哈希表。依赖两个方法:hashCode()和equals()
    TreeXxx:底层数据结构是二叉树。两种方式排序:自然排序和比较器排序

 

第十五天

Map(掌握)

    (1)将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。 
    (2)Map和Collection的区别?
        A:Map 存储的是键值对形式的元素,键唯一,值可以重复。夫妻对
        B:Collection 存储的是单独出现的元素,子接口Set元素唯一,子接口List元素可重复。光棍
    (3)Map接口功能概述(自己补齐)
        A:添加功能
        B:删除功能
        C:判断功能
        D:获取功能
        E:长度功能
    (4)Map集合的遍历
        A:键找值
            a:获取所有键的集合
            b:遍历键的集合,得到每一个键
            c:根据键到集合中去找值
        
        B:键值对对象找键和值
            a:获取所有的键值对对象的集合
            b:遍历键值对对象的集合,获取每一个键值对对象
            c:根据键值对对象去获取键和值

代码体现:

Map<String,String> hm = new HashMap<String,String>();
            
            hm.put("it002","hello");
            hm.put("it003","world");
            hm.put("it001","java");
            
            //方式1 键找值(掌握!)
            Set<String> set = hm.keySet();
            for(String key : set) {
                String value = hm.get(key);
                System.out.println(key+"---"+value);
            }

            

//方式2 键值对对象找键和值(理解就行)

Set<Map.Entry<String,String>> set2 = hm.entrySet();
            for(Map.Entry<String,String> me : set2) {
                String key = me.getKey();
                String value = me.getValue();
                System.out.println(key+"---"+value);
            }

 

 

集合总结:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值