Java对象容器--集合基础知识

Java基础

7月7日开始学习《Java从小白到大牛》

对象容器——集合

集合是什么?

集合是基于某种数据机构的容器

Java中提供了丰富的集合接口和类,它们来自于 java.util 包。

Java 集合类型分为:Collection 和 Map

Collection 子接口有:Set、Queue 和 List 等接口。每一种集合接口᧿述了一种数据结构。

任何集合中存放的都是对象,即引用数据类型,基本数据类型不能放到集合

List集合

  • List 集合中的元素是有序的,可以重复出现,可以通过序号访问

  • List集合关心的元素是否有序,而不关心是否重复

  • ArrayList 是基于动态数组数据结构的实现

  • LinkedList是基于链表数据结构的实现

二者比较: ArrayList 访问元素速优于 LinkedList,LinkedList占用的内存空间比较大,但 LinkedList 在批量插入或删除数据时优于 ArrayList。

常用方法
//HelloWorld.java文件
import java.util.ArrayList;//通过ArrayList实现
import java.util.List;
import java.util.Iterator;//迭代器
public class HelloWorld {
    public static void main(String[] args) {
        List list = new ArrayList();
        String b = "B";
        //向集合中添加元素
        list.add("A");
        list.add(b); //只能添加引用数据类型
        list.add("C");
        list.add(b);
        list.add("D");
        list.add("E");
//打印集合元素个数
        System.out.println("集合size = " + list.size());
//打印集合
        System.out.println(list);
//从前往后查找集合中的"B"元素
        System.out.println("indexOf(\"B\") = " + list.indexOf(b));
//从后往前查找集合中的"B"元素
        System.out.println("lastIndexOf(\"B\") = " + list.lastIndexOf(b));
//删除集合中第一个"B"元素
        list.remove(b);
        System.out.println("remove(3)前: " + list);
//判断集合中是否包含"B"元素
        System.out.println("是否包含\"B\":" + list.contains(b));
//删除集合第4个元素
        list.remove(3);
        System.out.println("remove(3)后: " + list);
//判断集合是否为空
        System.out.println("list集合是空的:" + list.isEmpty());
        System.out.println("替换前:" + list);
//替换集合第2个元素
        list.set(1, "F");
        System.out.println("替换后:" + list);
//清空集合
        list.clear();
        System.out.println(list);
// 重新添加元素
        list.add(1);//发生自动装箱,整数1被封装成Integer对象1,然后再放入到集合中
        list.add(3);
        int item = (Integer) list.get(0);//发生自动拆箱,从集合中取出的也是对象 } }
    }
}
遍历集合
  • 使用 for 循环遍历
  • 使用 for-each 循环遍历
  • 使用迭代器遍历:Java 提供了多种迭代器,List 集合可以使用 Iterator 和 ListIterator迭代器
//for循环
for (int i = 0; i < list.size(); i++) {
    System.out.printf("读取集合元素(%d): %s \n", i, list.get(i));
    System.out.println(list.get(i));
}
//for each循环
for (Object item:list) {
    String s=(String) item;//强制将object类型转化为String 类型
    System.out.println(s);
} 
//迭代器遍历
Iterator it=list.iterator();
        while(it.hasNext()){//判断是否还有元素可以迭代
            Object item=it.next();//调用迭代器的 next()返回迭代的下一个元素
            String s=(String) item;//Object 类型强制转换为 String 类型
            System.out.println(s);
        }

Set集合

  • Set 集合是由一串无序的,不能重复的相同类型元素构成的集合,不能用序号表示

  • 当不考虑顺序,且没有重复元素时,Set集合和List集合可以互相替换的。

  • Set 接口直接实现类主要是 HashSet,HashSet 是基散列表数据结构的实现。

  • Set 接口也继承自 Collection 接口,Set 接口中大部分都是继承自 Collection 接口

基本用法
import java.util.Set;
import java.util.HashSet;
public class Try {
    public static void main(String[] args) {
        Set set=new HashSet() ;//用Hashset类 实例化
        set.add("1");
        set.add("2");
        set.add("3");
        set.add("4");
//打印元素个数
        System.out.println(set.size());
//打印集合元素
        System.out.println(set);
// 删除集合中第一个"2"元素
        set.remove(2);
// 判断集合中是否包含"2"元素
        System.out.println("是否包含\"2\":" + set.contains(2));
// 判断集合是否为空
        System.out.println("set集合是空的:" + set.isEmpty());
// 清空集合
        set.clear();
        System.out.println(set);
    }
}
set遍历
//for each循环
for (Object item: set) {
    String s=(String) item;
    System.out.println(s);
}
Iterator it=set.iterator();//先需要获得迭代器对象
while (it.hasNext()){       //判断集合中是否还有元素可以迭代
   Object item= it.next(); 
   String s=(String) item;
    System.out.println(s);
}

Map集合

  • Map(映射)集合表示一种非常复杂的集合,允许按照某个键来访问元素。
  • Map 集合是由两个集合构成的,一个是键(key)集合,一个是值(value)集合。
  • 键集合是 Set 类型,因此不能有重复的元素
  • 值集合是 Collection 类型,可以有重复的元素
  • Map 集合中的键和值是成对出现的
  • Map 接口直接实现类主要是** HashMap**,HashMap 是基散列表数据结构的实现。

Map就像查英文字典一样,键就是要查的英文单词,而值是英文单词的翻译和解释等。有的时候,一个英文单词会对应多个翻译和解释,这是与Map集合特性对应的。

Map方法
  • get(Object key):返回指定键所对于的值;如果 Map 集合中不包含该键值对,则返回 null。
  • † put(Object key, Object value):指定键值对添加到集合中。
  • size():返回 Map 集合中键值对数。
  • keySet():返回 Map 中的所有键集合,返回值是 Set 类型。
  • values():返回 Map 中的所有值集合,返回值是 Collection 类型。
import java.util.Iterator;//迭代器
import java.util.HashMap;
import java.util.Map;
public class Try {
    public static void main(String[] args) {
        Map map=new HashMap();
        map.put(1,"a");
        map.put(2,"b");
        map.put(1,"c");//1键已经存在,替换原来值"a"
        map.put(3,"d");
        System.out.println(map.size());
        System.out.println(map);
        //通过键取值
        System.out.println(map.get(1));//如果不存在键值对,则返回 null
       //删除键值对
       map.remove(1);
        // 键集合中是否包含
        System.out.println( map.containsKey(1));
        //值集合中是否包含
        System.out.println("a");
        //判断集合是否为空
        System.out.println(map.isEmpty());
        // 清空集合
        map.clear();
        System.out.println(map);
    }
}
Map遍历

Map 集合遍历与 List 和 Set 集合不同,Map 有两个集合,因此遍历过程可以只遍历值的集合,也可以只遍历键的集合,也可以同时遍历。这些遍历过程都可以使用 for-each循环和迭代器进行遍历。

// 1.使用for-each循环遍历
Set keys = map.keySet(); // 获得键集合
for (Object key : keys) {
int ikey = (Integer) key; // 自动拆箱 
String value = (String) map.get(ikey); // 自动装箱 
System.out.printf("key=%d - value=%s \n", ikey, value);
}

// 2.使用迭代器遍历
Collection values = map.values(); // 获得值集合
// 遍历值集合
Iterator it = values.iterator();
while (it.hasNext()) {
Object item = it.next();
String s = (String) item;
System.out.println("值集合元素: " + s);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值