Java修炼之路(入门)——集合

集合概念介绍

  同数组一样,集合是用来存储数据的,就好比容器,数组的长度是固定不可变的,是在创建时就要定义好的,而集合与数组相比最显著的一个特点就是它的长度是可变的,在存储数据时根据实际存储的容量自动扩展容量,而且集合操作简便,但根据对数据操作的不同需求,Java提供了不同特点的集合。

集合体系介绍

(1)单列集合
                   父接口:collection


      子接口1:List                          子接口2:Set

实现类:ArrayList Vector LinkedList HashSet LinkedHashSet

各自特点介绍:
ArrayLis:底层数据结构是数组,查询快,增删慢,线程不安全,效率高
Vector:底层数据结构是数组,查询快,增删慢,线程安全,效率低(基本不用)
LinkedList:底层数据结构是链表,查询慢,增删快,线程不安全,效率高
HashSet:底层数据结构是哈希表,元素是无序(存储和取出的顺序不一致),元素唯一
LinkedHashSet:底层数据结构是哈希表+链表,在HashSet特点的基础上,它的元素是有序的
(2)双列集合
父接口:Map

      实现类:HashMap        LinkedHashMap
特点:Map将数据以键值对的形式存储,将键映射到值,键是唯一的,不能重复,每个键只能映射到一个值,一个值可以被多个键映射,键与值的对应关系是一对一或者是多对一。

(3)与集合紧密相关的数据结构
面试题:常见的数据结构及其特点

  • 栈:先进后出
  • 队列:先进先出
  • 数组:查询快,增删慢–ArrayList
  • 链表:增删快,查询慢–LinkedList
  • 树:对元素排序–TreeSet
  • 哈希表:增删查询都快–HashSet,哈希表是由链表和数组构成,在JDK8后加入了红黑树,当链表长度超过8时会自动转换成树结构进行存储

Collection集合

1.Collection常用方法
- boolean add()添加
- void clear() 清空集合
- boolean remove(Object obj)删除集合中第一次出现的元素
- boolean contain(Object obj)判断集合中是否存在元素
- boolean isEmpty()判断是否为空
- int size() 获取集合中元素个数
- Object [ ] toArray() 将集合转为数组
2. 遍历集合的两种方式

(1)增强for
(2)Iterator迭代器
各种方法使用具体代码:

package Test1;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class CollectionTest {
    public static void main(String[] args) {
        List<String> strList=new ArrayList<String>();
        // Boolean add()添加
        strList.add("hello");
        strList.add("world");
        strList.add("I");
        strList.add("like");
        strList.add("Java");
        strList.add("world");
//        fun1(strList);
        fun2(strList);
        System.out.println("-------------------------------------");
        // Boolean contain(Object obj)判断集合中是否存在元素
        boolean b1=strList.contains("Java");
        System.out.println(b1);
        System.out.println("-------------------------------------");

        // Boolean remove(Object obj)删除集合中第一次出现的元素
        boolean b2=strList.remove("world");
        System.out.println(b2);
        System.out.println("-------------------------------------");

        // int size() 获取集合中元素个数
        int length=strList.size();
        System.out.println(length);
        System.out.println("-------------------------------------");

        // Object [ ]   toArray()  将集合转为数组
        Object[] objects=strList.toArray();
        for(int i=0;i<objects.length;i++){
            System.out.println(objects[i]);
        }
        System.out.println("-------------------------------------");

        // Boolean isEmpty()判断是否为空
        boolean b3=strList.isEmpty();
        System.out.println(b3);
        System.out.println("-------------------------------------");

        // Void clear()   清空集合
        strList.clear();
        System.out.println(strList.isEmpty());
    }

//增强for
    private static void fun1(List<String> strList) {
        for(String s:strList){
            System.out.println(s);
        }
    }
 //Iterator迭代器接口
    private static void fun2(List<String> strList) {
        Iterator<String> iterator=strList.iterator();
        while(iterator.hasNext()){
            System.out.println(iterator.next());
        }
    }
}

  对于list集合,应为它是有序的所以可以根据索引,用list特有的方法get(int index)来获取元素,也能够达到遍历的效果

迭代器使用常见错误:

//导致数据输出有误
 Iterator<String> iterator=strList.iterator();
        while(iterator.hasNext()){
            String s=iterator.next();//已经获取数据
            System.out.println(iterator.next());//再次获取
        }

Map集合

Map集合中的数据结构都是针对”键”的
1.常用方法

  • v put( K key,V value ) : 添加元素,正常添加返回null ,如果添加的是重复的键,”新值”会替换”旧值”返回的就是”旧值”
  • v remove(Object key) : 根据键删除对应的键值对, 返回被删除元素的值
  • v get(Object key) : 根据指定的键获取对应的值

    1. 遍历方式
      (1) Set keySet() 获取map集合中所有的键存储到set集合中,再用get方法获取对应的值
      (2) Set
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class MapTest {
    public static void main(String[] args) {
        Map<String,String> map=new HashMap<>();
        map.put("孙悟空","吴承恩");
        map.put("红楼梦","曹雪芹");
        map.put("水浒传","施耐庵");
        map.put("三国演义","罗贯中");
        fun1(map);
        System.out.println("=============================================");
        fun2(map);
    }
    private static void fun1(Map<String, String> map) {
        Set<String> keys=map.keySet();
        for(String s:keys){
            System.out.println("键:   "+s+"\t\t值:  "+map.get(s));
        }
    }
    private static void fun2(Map<String, String> map) {
        Set<Map.Entry<String,String>> entrySet=map.entrySet();
        for(Map.Entry<String,String> e:entrySet){
            String key=e.getKey();
            String value=e.getValue();
            System.out.println("键:   "+key+"\t\t值:  "+value);
        }
    }
}
     方式2中Map里有一个内部接口Entry提供了两个方法getKey()和getValue()用于获取键值对对象的键和值

运行结果:
这里写图片描述

  遍历结果与存储时的顺序不一致,说明HashMap是无序的,而LinkedHashMap在数据结构中加入了链表,保证了元素有序
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值