集合/容器

集合概念

当我们保存一组一样(类型相同)的元素时候,我们应该使用一个容器来存储,就可以采用数组,但是数组存在以下缺点:

        1、长度开始时必须指定,一旦指定就不能更改。

        2、使用数组进行增加元素的步骤比较麻烦

这时候就可以使用一个更高级的容器“集合”来解决这些问题“

        1、可以保存任意多个不同类型的对象,使用方便

        2、提供了一系列的操作方法

        3、使用集合添加。删除元素时更方便

集合体系概述

java的集合有很多,主要分为两大类

//单列集合
ArrayList arrayList = new ArrayList();
arrayList.add("张三");
arrayList.add("李四");
        
//双列集合
HashMap hashMap = new HashMap();
hashMap.put("1","a");
hashMap.put("2","b");

Collection接口

Collection接口定义了存取一组对象的方法,其子接口Set和List分别定义了存储方式。

        Set中的数据对象不可以重复

        List中的数据对象有顺序(添加顺序)且可以重复

List接口及实现类

List继承了Collection接口,有三个实现类

        ArrayList:数组列表,数据采用数组方式存储

        LinkedList:链表

        Vector:数组列表,添加同步锁,线程安全的

ArrayLIst实现了长度可变的数组,在内存中分配连续的空间。

 

LinkedList采用链表存储方式。插入、删除元素时效率比较高。

 

ArrayList接口常用的方法

add(E element):添加单个元素

remove(int index):删除指定元素

contains:查找元素是否存在

size:获取元素个数

isEmpty:判断集合是否为空

clear:清空

import java.util.ArrayList;

public class Demo1 {
    public static void main(String[] args) {
        //单列集合
        ArrayList arrayList = new ArrayList();
        //使用add添加元素
        arrayList.add("张三");
        arrayList.add(666);
        arrayList.add(false);
        System.out.println(arrayList);

        //remove删除指定元素
        arrayList.remove(0);//删除第一个元素
        System.out.println(arrayList);

        //contains查找某个元素是否存在
        System.out.println(arrayList.contains(false));//查找false是否在集合之中

        //size获取集合长度
        System.out.println(arrayList.size());

        //isEmpty判断集合是否为空
        System.out.println(arrayList.isEmpty());

        //clear 清空集合
        arrayList.clear();
        System.out.println(arrayList);
    }
}

 List接口集合迭代

        1、for循环遍历

        2、增强for循环遍历

        3、迭代器遍历(Iterator)

import java.util.ArrayList;
import java.util.Iterator;

public class Demo1 {
    public static void main(String[] args) {
        ArrayList<String> arrayList = new ArrayList();
        arrayList.add("a");
        arrayList.add("b");
        arrayList.add("c");
        arrayList.add("d");
        arrayList.add("e");
        //使用for循环
        for (int i = 0; i < arrayList.size(); i++) {
            System.out.print(arrayList.get(i) + " ");
        }
        //使用增强for循环
        for (String s:arrayList){
            System.out.print(s + " ");
        }
        //使用迭代器
        Iterator<String> it = arrayList.iterator();
        while (it.hasNext()){
            String s = it.next();
            if ("a".equals(s)){
                it.remove();
            }
            System.out.println(s);
        }
        System.out.println(arrayList);
    }
}

Set接口

Set接口继承了Collection接口

        Set中所存储的元素时不重复的,但是是无需的,Set中的元素是没有索引的

Set接口有两个实现类

        HashSet:HashSet中的元素不能重复

        TreeSet:可以给Set集合中的元素进行指定方式的排序。存储的对象必须实现Comparable接口

Set接口集合迭代

遍历方式:

        增强for循环

        迭代器遍历

Map接口

HashMap

        HashMap中的key值不能重复,排列顺序是不固定的,可以存储一个null的键

TreeMap

        TreeMap中所有的元素都保持者某种固定的顺序,如果需要得到一个有序的Map就应该使用TreeMap,key值所在类必须实现Comparable接口。

HashTable

        实现了同步;不能存储null的键。

Map集合遍历

方式1:根据键找值
获取所有键的集合
  遍历键的集合,获取到每一个键
 根据键找值
方式2:根据键值对对象找键和值
  获取所有键值对对象的集合
遍历键值对对象的集合,获取到每一个键值对对象
  根据键值对对象找键和值

TreeMap

  TreeMap
适用于按自然顺序或自定义顺序遍历键(key)。
TreeMap根据key值排序,key值需要实现Comparable接口,
重写compareTo方法。TreeMap根据compareTo的逻辑,对
key进行排序。
键是红黑树结构,可以保证键的排序和唯一性
  • 10
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值