Java集合:Java集合概念

一、集合的设计背景

在没有集合之前,java中有一种方法可以存储对象(对象的引用)或者基本数据类型,那就是数组。但是数组有缺点,数组一旦初始化,长度是固定的,且只能存放相同数据类型的数据; 数组中提供的方法十分有限,对于添加,删除,插入数据等操作时非常不便,同时效率不高 ;数组 有序、可重复。对于无序、不可重复的需求,不能满足 。

基于以上必须解决的问题,java提供了对象(对象的引用)的保存方式,除了数组外,其余就被称为集合类。

二、集合的概念

为了使程序方便存储和操作数据不固定的一组数据,JDK提供了Java集合类,所有集合类放在Java.util包中 。

集合的特点:

  1. 不能存储基本数据类型,但是可以存储引用类型和包装类型,并以相同的方式工作。
  2. 对于动态数组,链接表,树和散列表 的实现是高效的,有一套成熟的API了。
  3. 容易扩展,增强代码的复用性。例如泛型。

三、集合的分类

Java集合类可以分为两大类:一类是实现Collection接口;一类是实现Map接口

Collection接口:基本的接口,有两个重要的子接口List接口Set接口。可以容纳一组集合元素(Element)。

Map接口:与Collection接口并列关系,Map提供键值对的映射。

如下图: 虚框的是抽象类,实框是实现类。虚线是继承,实线是实现。

img

Collection接口、List接口、Set接口以及相关类的关系 :
在这里插入图片描述

Map接口与Collection接口不同 :
在这里插入图片描述

四、List、Set、Map的区别?

比较ListSetMap
继承接口CollectionCollection
常见实现类ArrayList、LinkedLisk、VectorHashSet、LinkedHashSet、TreeSetHashMap、HashTable、ConcurrentHashMap
常用方法add()、remove()、get()、size()、contains()add()、remove()、size()put()、get()|、remove()、keySet()、entrySet()
元素可重复不可重复(equaks()判断)不可重复
顺序有序无序(由hashcode决定)
存储空值vector、arraylist、linkedlist可以存储多个nullhashset、linkedset可以存储一个null. treeset不能存储null.hashmap 、linkedhashmap key与value均可以为null. treemap key不可以为null,value可以为null. hashtable、concurrenthashmap key与value均不能为null.
线程安全vector线程安全concurrenthashmap、hashtable线程安全

五、遍历集合

5.1 list集合遍历

1.for-each循环遍历集合

public class DemoTest {

    public static void main(String[] args) {
        List<String> list=new ArrayList<String>();
        list.add("Hello");
        list.add("World");
        list.add("哈哈哈哈");
        //第一种遍历方法使用 For-Each 遍历 List
        for (String str : list) {
            System.out.println(str);
        }
    }
}

结果:

Hello
World
哈哈哈哈

2.for遍历集合

public class DemoTest {

    public static void main(String[] args) {
        List<String> list=new ArrayList<String>();
        list.add("Hello");
        list.add("World");
        list.add("哈哈哈哈");

        for(int i=0;i<list.size();i++) {
            System.out.println(list.get(i));
        }
    }
}

结果:

Hello
World
哈哈哈哈

3.迭代器遍历结合

public class DemoTest {

    public static void main(String[] args) {
        List<String> list=new ArrayList<String>();
        list.add("Hello");
        list.add("World");
        list.add("哈哈哈哈");

        Iterator<String> ite=list.iterator();
        while(ite.hasNext())//判断下一个元素之后有值
        {
            System.out.println(ite.next());
        }
    }
}

结果:

Hello
World
哈哈哈哈

5.2 map集合遍历

import java.util.*;
 
public class Test{
     public static void main(String[] args) {
      Map<String, String> map = new HashMap<String, String>();
      map.put("1", "value1");
      map.put("2", "value2");
      map.put("3", "value3");
      
      //第一种:普遍使用,二次取值
      System.out.println("通过Map.keySet遍历key和value:");
      for (String key : map.keySet()) {
       System.out.println("key= "+ key + " and value= " + map.get(key));
      }
      
      //第二种
      System.out.println("通过Map.entrySet使用iterator遍历key和value:");
      Iterator<Map.Entry<String, String>> it = map.entrySet().iterator();
      while (it.hasNext()) {
       Map.Entry<String, String> entry = it.next();
       System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());
      }
      
      //第三种:推荐,尤其是容量大时
      System.out.println("通过Map.entrySet遍历key和value");
      for (Map.Entry<String, String> entry : map.entrySet()) {
       System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());
      }
    
      //第四种
      System.out.println("通过Map.values()遍历所有的value,但不能遍历key");
      for (String v : map.values()) {
       System.out.println("value= " + v);
      }
     }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值