11-Java集合框架

List、Set、Map接口

List: 有序、可以重复、可以为空(null)
Set: 无序、不可重复
Map:
(1)key:不可重复,可以为空
(2)value:可以为空,可以重复

List实现类

ArrayList: 查询数据量大(线程不安全)
LinkedList:修改或插入删除业务逻辑(线程不安全)
Vector:实现线程安全的list集合

ArrayList

底层实现:可变数组

常用方法

boolean add(Object 0)
在列表的末尾顺序添加元素,
起始索引位置从0开始
在指定的索引位置添加元素。
void add(int index,Object 0)
索引位置必须介于0和列表中元素个数之间
int size()
返回列表中的元素个数
Object get(int index)
返回指定索引位置处的元素。取出的元素是
Object类型,使用前需要进行强制类型转换
boolean contains(Object 0)
判断列表中是否存在指定元素
boolean remove(Object 0)
从列表中删除元素
从列表中删除指定位置元素,
Object remove(int index)
起始索引位置从0开始

LinkedList

底层实现:链表

特有方法

void addFirst(Object 0)
在列表的首部添加元素
void addLast(Object 0)
在列表的末尾添加元素
Object getFirst()
返回列表中的第一个元素
Object getLast()
返回列表中的最后一个元素
Object removeFirst()
删除并返回列表中的第一个元素
Object removeL ast()
删除并返回列表中的最后一个元素

Vector

底层实现: 可变数组,只是实现了线程安全的效果
使用场景:多线程场景下使用

常用方法

ArrayList一致

Set实现类

HashSet:快速去重
LinkedHashSet:按照插入顺序获得元素
TreeSet :自定义、自然排序元素内容

HashSet

特点:
(1)不可重复:
添加元素时,会进行hashCode值和equals方法的调用判断对象是否相同
1. 两个对象的hashCode是否相同
–相同–》equals
----》true:当前要添加的元素和集合中的某个元素重复
–不相同(不会调用equals方法)
(2)无序,无法排序

底层实现

常用方法

// contains 
/**
contains : 调用hashCode方法比较值是否相同,然后调用equals方法比较值是否返回true,如果都相同则判断为相同对象

*/
		HashSet set = new HashSet();

        Person p1 = new Person("张三",101);
        Person p2 = new Person("李四",102);

        Person p3 = new Person("王五",101);

        set.add(p1);
        set.add(p2);

        boolean contains = set.contains(p3);

        System.out.println(contains);

LinkedHashSet

底层实现:链表+HashMap
用法场景:要保证set集合是按照插入顺序来迭代时使用

常用方法

HashSet一致

Map实现类

HashMap :快速存取、查询key-value数据
LinkedHashMap:想按照元素插入的顺序获取数据
TreeMap:自定义、自然排序

HashMap

//常用方法
Object put(Object key, Object val)
以“键-值对”的方式进行存储
Object get (Object key)
根据键返回相关联的值,如果不存在指定
的键,返回null
Object remove (Object key)
删除由指定的键映射的“键-值对”
int size()
返回元素个数
Set keySet ()
返回键的集合
Collection values ()
返回值的集合
boolean containsKey (Object key)
如果存在由指定的键映射的“键-值对”
返回true

LinkedHashMap

用法场景:要保证map集合是按照插入顺序来迭代时使用
常用方法和hashMap一致

TreeMap

自然排序:
(1)字符串、字符:unicode编码从小到大升序
(2)数字类型:数值从小到大
(3)时间类型:Date 时间戳大小从小到大(从过去到现在)

常用方法-排序

数据类:
public class Person implements Comparable{

    public int idCode;
    public String name;
    
@Override
    public int compareTo(Object o) {
        System.out.println("--调用compareTo方法");
        Person o1 = (Person) o;
        return this.idCode - o1.idCode;
    }
}

Person p1 = new Person("张三",101);
        Person p2 = new Person("李四",102);
        Person p3 = new Person("王五",103);
TreeMap treeMap = new TreeMap();

        treeMap.put(p1,"101");
        treeMap.put(p2,"102");
        treeMap.put(p3,"103");

LinkedList 和 ArrayList区别

共同点:(List集合的特性)
(1)元素可以重复
(2)都可以使用索引访问

ArrayList

优点:
(1)查询速度快
缺点:
(1)插入、删除速度慢

LinkedList

优点:
(1)插入、删除速递快
缺点
(1)查询速度慢

集合遍历

  1. 传统循环(for、while、do-while)
  2. 迭代器循环(Iterator):List、Set、Map

迭代器

		Set set = treeMap.keySet();

        Iterator iterator = set.iterator();//获取迭代器

        while(iterator.hasNext()){
            System.out.println(iterator.next());
        }

增强循环 forech 循环

//集合
HashSet set = new HashSet();

        set.add(p1);
        set.add(p2);
        set.add(p3);
        set.add(p4);
        set.add(p5);

        for(Object temp : set){
            System.out.println(temp);
        }
        
        //数组
        for(int i : arr){
            System.out.println(i);
        }
        

java1.8 新特性 lambda表达式-遍历

简化了代码的开发方式

List \Set集合遍历

list.stream().forEach(person ->{
            //person: 集合中每一个对象
            System.out.println(person);
        });

Map集合遍历

map.forEach((k,v) -> System.out.println(k+"--"+v) );//单行

map.forEach((k,v) -> {//多行
            Object key = k;
            Object value = v;
            System.out.println(k+"---"+v);
        });

Collections工具类

//常用方法
reverse(List):反转 List 中元素的顺序
shuffle(List):对 List 集合元素进行随机排序
sort(List):根据元素的自然顺序对指定 List 集合元素按升序排序
sort(ListComparator):根据指定的 Comparator 产生的顺序对 List 集合元素进行排序
swap(Listint i, int j):将指定 list 集合中的 i 处元素和 j 处元素进行交换
Object max(Collection):根据元素的自然顺序,返回给定集合中的最大元素
Object min(Collection)
int frequency(CollectionObject):返回指定集合中指定元素的出现次数
void copy(List dest,List src):将src中的内容复制到dest中
boolean replaceAll(List list,Object oldVal,Object newVal):使用新值替换 List 对象的所有旧值
unmodifiableCollection(Collection) 设置集合只读,下次添加报错

集合常见问题解决

边遍历边删除-只能使用迭代器删除

//1 . 迭代器删除
        Iterator iterator = list.iterator();

        while(iterator.hasNext()){
            if((Integer) iterator.next() == 2){
                iterator.remove();
            }
        }

数组和集合之间的转换

数组转集合:Arrays.asList()
集合转数组: list.toArray()

感谢各位看官,如果喜欢的话点赞给我多多支持,我会一直出Java全栈开发课程内容,蟹蟹大家~磕头

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

神秘的高先生

编写不易,感谢大佬的赏赐

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值