JAVA学习之集合

1.集合的概念

        将若干用途、性质相同或相近的“数据”组合而成的一个整体。

        Java集合只能保存引用类型的数据,不能保存基本类型数据。

Java常用集合:

Set(集):集合中的对象不按特定方式排序,并且没有重复对象。

List(列表):集合中的对象按照索引位置排序,可以有重复对象,允许按索引位置索引对象。

Map(映射):集合中的每个元素包含一个键(Key)对象和值(Value)对象,集合中没有重复的键对象,值对象可以重复。

2.Collection接口

        Collection接口是Java编程语言中用于表示一组对象的根接口。它是Java集合框架中所有集合类的父接口,包含了操作和处理集合的通用方法。Collection接口的实现类可以是有序的,也可以是无序的;可以允许重复元素,也可以不允许重复元素。

迭代和遍历:

Iterator<E> iterator():返回用于遍历集合的迭代器对象。

Collection接口的主要实现类包括:List有序、可重复的集合,允许使用索引访问元素Set:无序、不可重复的集合,不允许包含相同的元素。Queue:一种特殊的集合,通常用于存储和管理待处理元素。LinkList:实现了List接口的链表数据结构。HashSet:实现了Set接口,基于哈希表的集合,不保证元素顺序。TreeSet:实现了Set接口,元素有序排列。

注:Collection接口不直接支持Map

3.Iterator接口

它通过迭代器模式,让你可以逐个遍历集合中的元素,而不需要了解集合的内部结构。这样,可以轻松地遍历集合,而不用担心元素是如何存储的或者集合的具体类型。

Iterator接口中声明了如下方法:

hasNext():判断集合中的元素是否遍历完毕,如果没有,就返回true

next():返回下一个元素

remove():从集合中删除由next()方法返回的当前元素。

4.Set

它继承自Collection接口,用于表示一组元素的集合,Set是一个无序的集合,其中不允许包含重复的元素。

Set接口的主要实现类包括:

HashSet:基于哈希表实现,最常用的Set实现类,元素存储和检索速度较快,但不保证元素的顺序。

TreeSet:元素按照自然排序或自定义排序进行排列。

LinkedHashSet:继承自HashSet,具有HashSet的元素存储和检索速度,但能够保持元素添加顺序。

(1)HashSet

HashSet类是Set接口的一种常见实现,它基于哈希表(Hash Table)数据结构来存储元素,HashSet具有以下特点:

无序性:HashSet中的元素没有特定的顺序,即不保证元素存储和遍历的顺序与添加顺序相同。

不可重复性:HashSet不允许包含重复的元素,每个元素都是唯一的。

快速查找:由于采用了哈希表,HashSet具有快速的查找速度。

(2)TreeSet

TreeSet类是Set接口的另一个实现类。TreeSet中的元素会按照自然排序(如果元素类型实现了Comparable接口)或者自定义排序规则进行排列。

TreeSet特点:

有序性:TreeSet中的元素按照升序排列。如果元素类型实现了Comparable接口,那么TreeSet将使用compareTo()方法来进行自然排序。如果元素没有实现Comparable接口,则在创建TreeSet时需要传入一个Comparator对象来指定排序规则。

不可重复性:TreeSet不允许包含重复的元素,每个元素都是唯一的。

快速查找:TreeSet具有较快的查找、插入和删除操作。

5.List集合

        List集合包括List接口以及List接口的所有实现类。List集合中的元素允许重复,各元素的顺序就是对象插入的顺序。类似JAVA数组,用户可通过使用索引(元素在集合中的位置)来访问集合中的元素。

(1)接口

        List接口继承了Collection接口,因此包含Collection中的所有方法,此外List接口还定义了其他的方法。

(2)List集合的实现类

        List接口常用实现类有ArrayList与LinkedList

        ArrayList:ArrayList代表长度可变的数组,允许对元素进行快速的随机访问,包括null,并可以根据索引位置对集合进行快速的随机访问,缺点是向指定的索引位置插入对象或删除对象的速度较慢。

        LinkedList:在实现中采用链表数据结构,这种结构的优点是便于向集合中插入和删除对象,需要向集合中插入,删除对象时,使用LinkedList类实现的List集合的效率较高,但对于随机访问集合中的对象,使用LinkedList类实现List集合的效率较低。

6.Map集合

        Map集合没有继承Collection接口,其提供的是key到value的映射。Map中不能包含相同的key,每个key只能映射一个value。Map集合包括Map接口以及Map接口的是所有实现类。

(1)Map接口

Map接口的主要实现类:

HashMap:基于哈希表实现,是最常用的Map实现类。它提供了快速的插入、查找和删除操作,并且不保证元素的顺序。

TreeMap:可以自定义排序规则或使用Key的自然排序。

Map的常用方法:

添加、修改、删除元素:

        Map map = new HashMap();

        //put方法,往map集合中添加数据

        map.put(123,"zhangsan");

        map.put("list",99.5);

        map.put(66.5,true);

        map.put(false,'A');

        map.put('D',100);

        System.out.println(map);

        //map集合键值对中键不能重复,如果保存数据键值重复了,代码不会报错,但是会将

        //键对应的值用新的值覆盖掉

        map.put(false,'H');

        System.out.println(map);

        System.out.println("map集合的长度"+map.size());

        System.out.println("map集合通过key获取对应的value"+map.get(false));

        //通过key删除map集合中的数据

        map.remove(66.4);//删除的时候有key会直接删除,没有不删除也不报错

        System.out.println(map);

Map信息:

int size():返回Map中键值对的数量。

boolean isEmpty():判断Map是否为空。

void clear():清空Map中的所有键值对。

7.Collection类

        对于JAVA 集合,也有一个实用类,Java.util.Collections,它的一部分静态方法专门用于操纵List类型集合,还有一部分静态方法可用于操纵所有的Collection类型或Map类型集合。

        //Collections类用于操作集合的

        List list = new ArrayList();

        list.add("zhangsan");

        list.add("zhaoliu");

        list.add("zhao");

        list.add("lisa");

        list.add("daqiao");

        list.add("tom");

        list.add("liuxiang");

        System.out.println(list);

        //集合排序,升序排序

        Collections.sort(list);

        System.out.println(list);

        //乱序

        Collections.shuffle(list);

        System.out.println(list);

        //倒序

        Collections.reverse(list);

        System.out.println(list);

8.泛型

        泛型(Generics)是Java编程语言中引入的一种类型参数化机制,它允许定义在类、接口和方法时使用类型参数,使得这些类。接口和方法可以在不同的数据类型上操作。泛型提供了类型安全、可重用、灵活的编程方式,使得代码更加健壮和高效。

        //<>中间写的类型就是集合限定类型,也就是泛型

        List<String> list = new ArrayList<String>();

        list.add("123");

        list.add("456");

        list.add("789");

        Iterator<String> it = list.iterator();

        while (it.hasNext()){

            String s = it.next();

            System.out.println(s);

        }

        Map<String,Integer> map = new HashMap<>();

        map.put("张三",10);

        System.out.println(map);

    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值