首页 > 其他分享 >集合

集合

时间:2023-03-11 22:46:31浏览次数:35  
标签:map object list value Collections key 集合

Collection

动态保存
接口:list,set
双列集合,单列集合

Collection遍历

Iterator iterator=coll.iterator();
while(iterator.hasNext()){
    System.out.println(iterator.next());//next()下移,并且把下移以后集合中的元素返回
    //或者使用增强for循环,底层仍然是迭代器
}

单列集合

list

add();
remove();//指定删除某个元素,或者按照索引删除
contains();//查找元素
isEmpty();
clear();
addAll(collection);
removeAll(collection);
list.get(2);//
sublist(int start,int end);//返回[start,end)
set();
.size();

ArrayList

  • ArrayList 维护一个存放object的elementData数组
  • 创建时,默认elementData容量为0,第一次扩容,容量变为10,后再扩容,容量变成原来的1.5倍
  • 如果使用的是指定大小的构造器,则初始elementData的容量为指定大小,后再扩容,容量变成原来的1.5倍
  • transient修饰的属性不会被序列化
  • 扩容机制:Arrays.copyOf()

vector

线程同步,线程安全,但效率不高

  • 扩容:无参,默认10,就按2倍扩容;指定大小,按照两倍扩容

LinkedList

实现了双向链表和双端队列,可以添加任意元素(可以重复,null)
线程不安全
first,last指向首节点和尾节点
prev,next,item前指针,后指针

set

无序,没有索引
treeset hashset

  • 遍历:迭代器,增强for循环(不能用索引遍历)
  • set可以加null,元素不能重复(实际上看的是地址)
set.add(new String("dd"));
set.add(new String ("dd));
  • 取出的顺序不是添加的顺序,但是固定的
  • 执行add方法后会返回一个boolean确认是否添加成功
  • 平时需要的时候可以根据需要重写hashcode and equals(直接用idea wizard)
  • hashset去重机制:先用hash函数算出索引,然后找到相应的table,如果无数据,直接加入,如果有数据就用equals遍历比较,如果不相同则加入
  • treeset去重机制:如果传入一个comparator比较器(匿名对象),就使用实现的compare方法去重,如果方法返回0就认为是相同的元素/数据,就不添加,如果没有传入comparator对象,则以添加的对象的实现的comparable接口的compareto方法去重

LinkedHashSet

  • 是hashset的子类
  • 底层维护了一个数组+双向链表
  • 每个节点有pre和next属性
  • 第一次添加的时候,table的大小为16,node的类型为LinkedHashMap$Entry

map

map和collection并列

  • 保存具有映射关系的键值对
  • key和value可以是任何封装的对象,会封装到HashMap$Node的对象中
  • Map中的key值不允许重复
  • 放入同一个key值,后面的value替换掉之前的value
  • 计算重复的时候只用key的hashcode值
  • key,value都可以为空,但是key为空只能有1个,value为空可能有多个
  • 通过一个key一定能找到唯一的一个value
  • Entry的运行类型是node,因为HashMap$Node实现了Entry的接口
  • Entry提供getKey(),getValue(),方法
  • 常见实现类有HashMap,TreeMap,Properties
  • HashMap线程不安全

map接口的常用方法

Map map=new HashMap();
map.put(key,value);
map.get(key);//返回对应的value
map.getValue();

map遍历方式

  • 增强for循环
  • 迭代器
  • Iterator iterator=key.iterator();
  • 通过EntrySet
Set entryset=map.entrySet();
for(object entry:entrySet){
   Map.entry m=(Map.entry) entry;
   m.getKey();
}

hashtable

  • key和value都不能为空
  • hashtable线程安全,hashmap线程不安全
  • 底层有数组hashTableEntry[]

collection工具类

//构造函数
Collections();
//
Collections.reverse(list);
Collections.shuffle(list); 
Collections.sort(list,new Comparator(){
    public int compare(object o1,object o2){
        return ((String)o1.length()-(String)o2.length());
    }
})
Collections.swap(list,postion1,position2);//交换指定位置的两个元素
Collections.max(list ,new comparator(){
    public int compare(object o1,object o2){
         return ((String)o1.length()-(String)o2.length());
    }
})
Collections.frequency(list,object);//返回一个对象的出现次数
Collections.copy(dest,list);//将list拷贝到dest中,为了完整拷贝,应该先给dest添加元素,使其大小和list的大小一样

标签:map,object,list,value,Collections,key,集合
From: https://www.cnblogs.com/hithin/p/17202205.html

相关文章