Java collection and map

12. collection

Why collection?

集合其实也是一种容器。和数组一样是用来存储多个数据的容器

  • 对比着数组来讲:

1、集合中的大小不固定。随着向集合中存储的元素增加,集合的大小也随着增加

2、集合中可以存储引用类型的任何数据(可以存储不同类型的引用数据)

3、集合除了可以通过角标操作外,还具有其它操作元素的方式

  • 集合和数组的区别:

1、 从存储元素的大小上:

数组中的大小是固定的

集合中的大小是可改的

2、 从存储类型上:

数组中只能存储相同类型的元素

集合中可以存储不同类型的引用元素

3、 从存储内容上:

数组中可以存储基本类型数据,还可以存储引用类型数据

String[] strs=new String[3]; int[] arr=new int[3];

集合中只能存储引用类型数据

​ 引用类型有:Integer、Long、Double、Character、String、….

小结:集合是一个容器,是用来存储和获取数据的

collection‘s function?

boolean add(E e): 添加元素

boolean remove(Object o):从集合中移除元素

void clear():清空集合中的元素

boolean contains(Object o):判断集合中是否存在指定的元素

boolean isEmpty():判断集合是否为空,为空时返回true

int size():集合的长度,也就是集合中元素的个数

boolean addAll(Collection c): 将一个集合所有的数据添加到另一个集合

boolean containsAll(Collection c): 判断集合中是否包含另一个集合中的所有元素

说明:Collection集合中不具有对集合中某个元素进行修改,或获取指定的某个元素

​ 如果想要修改集合中的元素或查找集合中的元素:

​ 1、对Collection集合进行遍历。在遍历的过程中,找到相应的元素并修改//iterator

​ 2、把集合转换为数组 Object[] toArray()// T[] toArray(T[] a)

  • list: ArrayList , linked list,vector,

拥有Collection 的所有方法

​ public void add(int index, E element) : 将指定的元素,添加到该集合中的指定位置上。
​ public E get(int index) :返回集合中指定位置的元素。
​ public E remove(int index) : 移除列表中指定位置的元素, 返回的是被移除的元素。
​ public E set(int index, E element) :用指定元素替换集合中指定位置的元素,返回值的更新前的元素。

//注意:只要集合遍历过程中执行删除,就必须让索引–

  • set: Hashset, treeset, linkedhashset.

Set集合的特点:1.无序(存取数据无序) 2.没有索引 3.不能重复

Set是Collection的子接口,所以它拥有Collection接口的所有功能,并且不能直接使用,只能使用它的

实现类:HashSet

13.Map

Interface Map<K,V>

参数类型
K - map集合中键的类型
V - map集合中值的类型

常用的实现类:hashMap

Map集合的常用方法
public V put(K key, V value) : 把指定的键与指定的值添加到Map集合中。
public V remove(Object key) : 把指定的键 所对应的键值对元素 在Map集合中删除,返回被删除元素的值。
public V get(Object key) 根据指定的键,在Map集合中获取对应的值。

boolean containsKey(Object key) 如果此映射包含指定键的映射,则返回 true 。
boolean containsValue(Object value) 如果此映射将一个或多个键映射到指定的值,则返回 true 。

public Set keySet() : 获取Map集合中所有的键,存储到Set集合中。
public Set<Map.Entry<K,V>> entrySet() : 获取到Map集合中所有的键值对对象的集合(Set集合)。

04_HashSet存储自定义对象,去重

总结-要对自定义对象进行去重,必须在类中重写hashCode和equals,自动生成即可

13.1Map集合的第一种遍历方式(键找值)

/*
    07_Map集合的第一种遍历方式(键找值)
    Map接口没有iterater方法,它没有迭代器,所以不能通过迭代器直接遍历

    我们可以可以通过一个方法来间接遍历,获取所有的键之后,遍历键,从而获取值
    public Set<K> keySet() : 获取Map集合中所有的键,存储到Set集合中。
 */
public class MapDemo02 {
    public static void main(String[] args) {
        Map<Integer, String> maps = new HashMap<>();
        maps.put(1, "刘备");
        maps.put(2, "关羽");
        maps.put(3, "张飞");
        maps.put(4, "吕布");


        Set<Integer> keys = maps.keySet();

        //方式一:迭代器
        Iterator<Integer> iterator = keys.iterator();
        while (iterator.hasNext()) {
            Integer key = iterator.next();
            String value = maps.get(key);
            System.out.println(key+"-"+value);
        }

        //方式二:foreach循环
        for (Integer key : keys) {
            String value = maps.get(key);
            System.out.println(key+"-"+value);
        }


    }
}

13.2_Map集合的第二种遍历方式(键值对遍历)

/*
   08_Map集合的第二种遍历方式(键值对遍历)

    public Set<Map.Entry<K,V>> entrySet() : 获取到Map集合中所有的键值对对象的集合(Set集合)。
 */
public class MapDemo03 {
    public static void main(String[] args) {
        Map<Integer, String> maps = new HashMap<>();
        maps.put(1, "刘备");
        maps.put(2, "关羽");
        maps.put(3, "张飞");
        maps.put(4, "吕布");

        //调用entryset方法,将所有的键值对保存到Set集合中
        Set<Map.Entry<Integer, String>> entries = maps.entrySet();

        //增强for循环
        for (Map.Entry<Integer, String> entry : entries) {
            System.out.println(entry.getKey()+"-"+entry.getValue());
        }

    }
}

—|Collection(接口): 单列集合
—|List(接口): 有存储顺序, 可重复
—|ArrayList(实现类): 数组实现, 查找快, 增删慢
由于是数组实现, 在增和删的时候会牵扯到数组
增容, 以及拷贝元素. 所以慢。数组是可以直接
按索引查找, 所以查找时较快
—|LinkedList(实现类): 链表实现, 增删快, 查找慢
由于链表实现, 增加时只要让前一个元素记住自
己就可以, 删除时让前一个元素记住后一个元
素, 后一个元素记住前一个元素. 这样的增删效
率较高但查询时需要一个一个的遍历, 所以效率
较低
—|Vector(实现类): 和ArrayList原理相同, 但线程安全, 效率略低
和ArrayList实现方式相同, 但考虑了线程安全问
题, 所以效率略低
—|Set(接口): 无存储顺序, 没有索引,数据不可重复
—|HashSet(实现类)(原理(数组+链表+红黑树),先判断hash值,然后判断内容是否相同,然后决定是否保存,如果相同hash值,内容不同,使用链表实现。)
—|TreeSet(实现类)
—|LinkedHashSet(实现类)有存储顺序, 没有索引,数据不可重复
—| Map(接口): 键值对(key 不能重复,value 可以重复
—|HashMap(实现类)
—|TreeMap
—|HashTable
—|LinkedHashMap


vector的扩充机制:按照容器现在容量的一倍进行增长。vector容器分配的是一块连续的内存空间,每次容器的增长,并不是在原有连续的内存空间后再进行简单的叠加,而是重新申请一块更大的新内存,并把现有容器中的元素逐个复制过去,然后销毁旧的内存。这时原有指向旧内存空间的迭代器已经失效,所以当操作容器时,迭代器要及时更新。(与arraylist 类似,只是arraylist时增加50%,而vector是增加1倍)。

泛型:

Collection c = new arraylist<>();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值