Java集合

目录

一、List

(1)ArrayList

(2)Vector

(3)LinkedList

主要方法:

(1) add()

(2)set()

(3)remove()

(4)get()

(5)int size()

(6)of()

(7)List 和Array互换

二、Map

主要方法:

(1)put() 

(2)获取功能

(3)遍历功能

三、Set

(1)HashSet

(2)LinkedHashSet

(3)TreeSet

主要方法

(1)add()

(2)remove()

(3)contains()


一、List

List接口继承了Collection接口以定义一个允许重复项的有序集合。

  • 允许插入重复的元素
  • 允许添加null

以下是接口的三种分类:

(1)ArrayList

  • 优点: 底层数据结构是数组,查询快,增删慢。
  • 缺点: 线程不安全,效率高

(2)Vector

  • 优点: 底层数据结构是数组,查询快,增删慢。
  • 缺点: 线程安全,效率低

(3)LinkedList

  • 优点: 底层数据结构是链表,查询慢,增删快。
  • 缺点: 线程不安全,效率高
     

主要方法:

(1) add()

       在指定索引添加元素

  List list= new ArrayList();
        list.add("hi");/* 或写为list.add(0,"hi"); */
        System.out.println(list);
  /*运行结果:[hi]
     */

(2)set()

提供下标和内容,修改对应位置的数据

  List list= new ArrayList();
        list.add("hi");
        list.set(0,"hello");
        System.out.println(list);
/*运行结果:[hello]
  */

(3)remove()

   删除指定元素

  List list= new ArrayList();
        list.add("hi");
        list.set(0,"hello");
        list.add(1,"text");//再添加一个元素 
        list.remove(0); //删除第一个元素,或写为list.remove("hello");
        System.out.println(list);
 /*运行结果: [text]
   */

(4)get()

获取指定索引的元素

 List list= new ArrayList();
        list.add("hi");
        list.add(1,"text");
        list.add("hello");
        System.out.println(list.get(2)+"");/*获得下标为2的元素 */
/* 运行结果;hello  */

(5)int size()

 获取链表大小(包含元素的个数)

   List list= new ArrayList();
        list.add("hi");
        list.add(1,"text");
        list.add("hello");
        System.out.println(list.size()+"");/*获取长度 */
/* 运行结果:3 */

(6)of()

          可以用创建List,但是不接受null值

List<Integer> list = List.of(1, 2, 5);

Iterator本身也是一个对象,但它是由List的实例调用iterator()方法的时候创建的。

Iterator对象有两个方法:boolean hasNext()判断是否有下一个元素E next()返回下一个元素。因此,使用Iterator遍历List代码如下:

List<String> list = List.of("apple", "pear","banana"); 
for (Iterator<String> it =list.iterator(); it.hasNext();)
{
    String s = it.next();
    System.out.println(s);
}

 由于Iterator遍历是如此常用,所以,Java的for each循环本身就可以帮我们使用Iterator遍历。把上面的代码再改写如下:

List<String> list = List.of("apple", "pear", "banana");
for (String s:list)
{
System.out.println(s);
}

(7)List 和Array互换

    List 变成Array:

     (1)给toArray(T[])传入一个类型相同的Array,List内部自动把元素复制到传入的Array中

List<Integer> list =List.of(12, 34, 56);
Integer[] array =list.toArray(new Integer[3]);
for (Integer n:array) {}
System.out.println(n);
}

如果我们传入类型不匹配的数组,例如,String[]类型的数组,由于List的元素是Integer,所以无法放入String数组,这个方法会抛出ArrayStoreExceptio。
   (2)通过List接口定义的T[] toArray(IntFunction<T[]> generator)方法

Integer[] array = list.toArray(Integer[]::new);

 Array变成List:

              通过List.of(T…)方法最简单

Integer[] array = { 1, 2, 3 };
List<Integer> list = List.of(array);

二、Map

Map集合没有继承Collection接口,其提供的是键到值的映射。Map不能包含相同的键,每个键只能映射一个值。键还决定了储存对象在映射中的储存位置。

  •  LinkedHashMap集合用法跟HashMap基本一致,它是基于链表和哈希表结构的所以具有存取有序,键不重复的特性,存的顺序和遍历出来的顺序是一致的
  • TreeMap与TreeSet类似,都需要重写比较器(外部比较器+内部比较器)。TreeMap集合特点:单一,有序

主要方法:

(1)put() 

  • 调用put(K key, V value)方法时,就把key和value做了映射并放入Map。
   Map<String, String> map = new HashMap<>();
        map.put("hi", 123);
        System.out.println(map);
/* 运行结果:{hi=123}  */

(2)获取功能

  • 获取value
 Map<String, String> map = new HashMap<>();
        map.put("hi", "123");
        //Collection<V> values()
        Collection<String> values=map.values();
        for(String value: values) {
            System.out.println(value);
      /* 运行结果:123  */
  •   获取key
Map<String, String> map = new HashMap<>();
        map.put("hi", "123");
        //Set<K> keySet()
        Set<String> keys = map.keySet();
        for(String key: keys) {
            System.out.println(key);
                    
        }
/*运行结果:hi  */

(3)遍历功能

  •   调用V get(K key)时,就可以通过key获取到对应的value
Map<String, String> map = new HashMap<>();
        map.put("hi", 123);
        Set<String>keys=map.keySet();
        for(String key:keys) {
             /*通过key找value */
            String value = map.get(key);
            System.out.println(key+"="+value);
        }
/* 运行结果:hi=123   */
  •  通过(entry)中间人Set<Map.Entry<K,V>> entrySet() 来寻找Key和Value
  Map<String, String> map = new HashMap<>();
        map.put("hi", "123");
        //获取所有中间人entrys
        Set<Map.Entry<String, String>> entrys =map.entrySet();
        //遍历所有entrys用Map.Entry<String, String>类型的entry接收
        for(Map.Entry<String, String> entry:entrys) {
            String key = entry.getKey();
            String value = entry.getValue();
            System.out.println(key+"= "+value);
}
/*运行结果: hi=123 */

三、Set

  • Set集合中的对象不按特定的方式排序,只是简单的将对象加入到集合中,但是Set集合不能包重复对象
  • Set接口继承了Collection接口,因此也包含Collection接口的所有方法
  • Set实际上相当于只存储key、不存储value的Map。我们经常用Set用于去除重复元素

(1)HashSet

  •  不允许重复,无序

(2)LinkedHashSet

  • 继承自HashSet,特点是:有序,唯一,效率高

(3)TreeSet

  • 为使用树来进行储存的Set接口提供了一个工具,对象按升序储存,访问和检索是很快的。在存储了大量的需要进行快速检索的排序信息的情况下。

主要方法

(1)add()

      添加元素

Set<String>set=new HashSet<>();
       set.add("hi");
       System.out.println(set);
/* 运行结果: [hi]  */

(2)remove()

        删除元素

 Set<String>set=new HashSet<>();
       set.add("hi");
       set.add("hello");
       set.remove("hi");
       System.out.println(set);
/*运行结果:[hello]  */

(3)contains()

   判断是否包含某个元素

 Set<String>set=new HashSet<>();
       set.add("hello");
       System.out.println(set.contains("hi"));
/*运行结果: false  */
  • HashSet是无序的,因为它实现了Set接口,并没有实现SortedSet接口;
  • TreeSet是有序的,因为它实现了SortedSet接口。这个顺序是元素的排序顺序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值