集合容器的学习

collection接口:

  • 集合中不能直接存储基本数据类型,也不能存储java对象,只是存储java对象的内存地址,基本数据类型会自动装箱。

  • boolean add(E e):将给定元素转存到对象集合中

  • boolean remove(Object o):将对象集合中与给定元素移除

  • void clear():清空集合

  • boolean contains(Object o):判断集合是否包含给定元素

  • boolean isEmpty():判断集合是否为空

  • int size():获取集合长度

  • boolean addAll(Collection c) :将给定集合中的元素转存到对象集合中

  • boolean removeAll(Collection c):将当前集合中与给定集合中相同的元素移除掉

  • boolean containsAll(Collection c) :保留当前集合与给定集合相同的元素

  • boolean retainAll(Collection c):将对象集合中与给定集合中不同的元素移除

  • 子接口

  • --List接口:存和取有序,可以重复

  • public interface List extends Collection

    • List接口中的方法
    • void add(int index,E element)(插入功能) :将参数2插入到集合中的参数1索引位置
    • E remove(int index):根据给定的索引从集合中移除元素,并将移除的元素返回
    • E get(int index):(获取功能)返回根据给定的索引处集合中元素
    • E set(int index,E element): (替换功能) 使用参数2替换参数1索引处的元素,并将被替换的元素返回
    • int indexOf(Object obj):返回obj首次出现位置
    • int lastIndexOf(Object obj):返回obj最后一次出现位置
    • list subList(int fromIndex,int toIndex):返回从fromIndex到toIndex位置的集合
    • ArrayList:作为list主要实现类,线程不安全效率高;底层使用Object[] elementData存储,默认扩容为原来的1.5倍
    • LinkedList:对于频繁的插入、删除操作,使用此类效率比ArrayList高;底层是链表
    • Vector:作为list接口的古老实现类,线程安全,效率低;底层使用Object[] elementData存储,默认扩容为原来的2倍
    • 总结:这三个实现类的异同点:同--都实现了list接口,存储数据特点相同:存取有序可重复;
    • 异--见上
  • --set:存和取无序,不可以重复

    • HashSet:不包含重复元素并且最多包含一个null的集合线程不同步,线程不安全,效率高;删除需要使用迭代器的移除方法

      • LinkedHashSet:底层链表和哈希表,不同步,线程不安全,效率高;删除需要使用迭代器的移除方法
    • TreeSet:底层是二叉树元素唯一有序,底层使用TreeMap类实现

      • 自然顺序排列Comparable接口:0-9,a-z;

      • 比较器(精确)排序Comparator接口

      • TreeSet():空参使用的是自然排序

      • TreeSet(Comparator<? super E> comparator) :有参构造,使用的是比较器(精确)排序

      • o1.compareTo(o2);//o1-o2  默认从小到大
        

collections中的方法:

public static void reverse(List<?> list):反转集合中的元素
public static void shuffle(List<?> list):打乱集合中的元素
public static int indexOfSubList(List<?> source,List<?> target):查找子串在集合中首次出现的位置
public static int lastIndexOfSubList(List<?> source,List<?> target):查找子串在集合中首次出现的位置
public static void rotate(List<?> list,int distance):集合中的元素向后移动distance个位置
public static void swap(List<?> list,int i,int j):交换集合中指定位置的元素
public static <T> void copy(List<? super T> dest,List<? extends T> src):将集合src复制到dest中(dest>src)
  • Comparable和Comparator 区别:

  • 相同点:两者都是对象之间的比较,都可以自定义比较规则

  • ​ 两者都返回一个描述对象之间关系的int

  • 不同点:comparable 在java.lang包下,comparator在java.util包下;

  • ​ 实现comparable 必须重写compareTo(T o),实现comparator必须重写compare(T o1,T o2);o1要添加的元素,o2代表原来元素

  • ​ Comparator与Comparable同时存在的情况下,比较器Comparator优先级高。

  • ​ 使用Comparable需要修改原先的实体类,是属于一种自然排序,而Comparator 是不用修改原先的类的实现一个新的比较器 。

  • remove删除元素可以按索引也可以按元素删除

  • list.remove(2);//默认索引
    list.remove(new Integer(2));//元素
    
  • 迭代器Iterator

    • hasNext()---判断是否有下个元素
    • next()---调出下一个元素
    • remove()---移除迭代器中的元素
  • 集合与数组相互转化

  • //集合--->数组
    Colloction<E> coll = new ArrayList<>();
    Object[] obj = coll.toArray();
    //数组--->集合
    List<String> list = Arrays.asList(new String[]{"xxx", "sss"});//[xxx, sss]
    List<Integer> arr = Arrays.asList(new Integer[]{123, 456});//[123, 456]
    
  • 泛型通配符<?>-----任意的类型,

  • ----向下限定:<=E; E或者E的子类
  • -----向上限定: >=E; E或者E的父类
  • 增强for:

    • for(外层集合 变量名1:外层元素){

      for(内层集合  变量名2:内存元素){
      

      ​ //使用变量名2

      ​ }

    • for (ArrayList<String> str : peo) {
           for (String stu : str) {
               System.out.println(stu);
           }
      }
      
  • 静态导入

    • import static 包名.包名.类名.方法名;
    • 可以是import static 包名.包名.类名.*;
    • 注意:方法必须为静态方法,导入的静态方法不能和Object里面的一样
  • 可变参数

    • 修饰符 返回值类型 方法名(数据类型… 变量名){}
    • 注意:多个形参,可变参数必须放最后

Map接口(双列集合):

  • HashMap:非同步,允许空值和空键,唯一

    • LinkedHashMap:存取有序且唯一
  • TreeMap:基于红黑树,元素有序且唯一,默认自然排序,可通过有参重写comparator排序对键排序且不同步

  • HashTable:同步且不允许空值和空键,其他和HashMap基本一样

  • V put(K key,V value):给map集合中添加键(key)和值(value),并返回以前与key关联的值,如果没有,则返回null;键相同则将值替代,返回旧值

  • public Set KeySet():返回键的集合

  • public Collection values():返回值的集合

  • public boolean isEmpty():判断集合是否为空

  • public V remove(Object key):移除键位所对应的值

  • public V get(Object key):通过指定键位找值

  • public boolean containsKey(Object key):判断集合中是否包含给定的键

  • public boolean containsValue(Object value):判断集合中是否包含给定的值

  • public void clear():清空集合

  • map集合的遍历:

    • 1.获取所有的键的集合,遍历集合通过键找值

    • Set<Integer> keySet = map.keySet();
      for (Integer key : keySet) {
      	String value = map.get(key);
      	System.out.println(key+"--"+value);
      }
      
    • 2.获取键值对的集合,通过键值对对象获取键,或取值

      Entry<K, V> 是Map接口中的内部接口

      Map.Entry<K,V>

    • Set<Entry<Integer,String>> entrySet = map.entrySet();
      for(Entry<Integer,String> entry: entrySet) {
      	System.out.println(entry.getKey()+"--"+entry.getValue());
      }
      
posted @   ice204  阅读(68)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示