Java 集合框架和泛型(一)

集合框架

如果并不知道程序运行时会需要多少对象,或者需要更复杂方式存储对象——可以使用Java集合框架

Collection 不唯一、无序

List 不唯一、有序

Set 唯一、无序

ArrayList→List←LinkedList

ArrayList:内部使用数组实现,遍历查询速度快

LinkedList:内部使用双向链表实现,增删改效率高

内容

Java集合框架提供了一套性能优良、使用方便的接口和类,它们位于java.util包中

Collection 接口存储一组不唯一,无序的对象

List 接口存储一组不唯一,有序(插入顺序)的对象

Set 接口存储一组唯一,无序的对象

Map接口存储一组键值对象,提供key到value的映射

List接口的实现类
  1. ArrayList实现了长度可变的数组,在内存中分配连续的空间,遍历元素和随机访问元素的效率比较高

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

ArrayList集合类

新闻管理系统,需求如下

可以存储各类新闻标题(包含ID、名称、创建者)

可以获取新闻标题的总数可以逐条打印每条新闻标题的名称

确定存储方式

ArrayList类是List接口的一个具体实现类

ArrayList对象实现了可变大小的数组

随机访问和遍历元素时,它提供更好的性能

确定存储对象

创建类型:新闻标题

包含属性: ID、名称、创建者

具体实现

List下常用函数

方法名说明
boolean add(Object o)在列表的末尾顺序添加元素,起始索引位置从0开始
void add(int index,Object o)在指定的索引位置添加元素。索引位置必须介于0和列表中元素个数之间
int size()返回列表中的元素个数
Object get(int index)返回指定索引位置处的元素。取出的元素是Object类型,使用前需要进行强制类型转换
boolean contains(Object o)判断列表中是否存在指定元素
boolean remove(Object o)从列表中删除元素
Object remove(int index)从列表中删除指定位置元素,起始索引位置从0开始

Collection接口常用通用方法还有:clear()、isEmpty()、iterator()、toArray()

package ch1;
​
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Objects;
​
public class Text01 {
    public static void main(String[] args) {
        ArrayList list = new ArrayList();
        //向集合中添加数据
        list.add("张三");
        list.add("李四");
        list.add("王五");
​
        //根据下标获得单个对象
        /*
        System.out.println(list.get(2));
        */
        Object src = list.get(2);
        System.out.println(src);
​
        //根据指定下标插入对象
        list.add(1,"赵六");
        System.out.println(list.get(1));
​
        //获得集合大小
        int size = list.size();
        System.out.println(size);
        System.out.println(list.get(3));
​
        //根据下标删除值
        /*
        System.out.println("删除:"+list.remove(2));
         */
        Object obj = list.remove(2);
        System.out.println("删除:"+obj);
​
        //根据值删除值
        list.remove("王五");
​
        System.out.println(Arrays.toString(list.toArray()));
​
        System.out.println("------------");
        //循环遍历集合
        for (Object v : list){
            System.out.println(v);
        }
        System.out.println("------------");
        for (int i = 0;i<list.size();i++){
            System.out.println(list.get(i));
        }
        
        //判断指定值是否在集合中
        boolean bool = list.contains("张三");
        System.out.println("在集合中吗?"+bool);
        System.out.println("------------");
        //清空集合
        list.clear();
        System.out.println(list.size());
        //判断集合是否无值
        list.add("赵七");
        System.out.println(list.isEmpty());
    }
​
}
LinkedList集合类

新闻管理系统,需求如下

可以添加头条新闻标题

获取头条和最末条新闻标题

可以删除末条新闻标题

确定存储方式

LinkedList类是List接口的一个具体实现类

LinkedList 类用于创建链表数据结构

插入或者删除元素时,它提供更好的性能

具体实现

LinkedList常用方法

方法名说明
void addFirst(Object o)在列表的首部添加元素
void addLast(Object o)在列表的末尾添加元素
Object getFirst()返回列表中的第一个元素
Object getLast()返回列表中的最后一个元素
Object removeFirst()删除并返回列表中的第一个元素
Object removeLast()删除并返回列表中的最后一个元素
Set接口

HashSet→Set←TreeSet

Set set  = new HashSet();
set.add("A")
set.add("E")
set.add("T")
set.add("D")
    
System.out.println(set.size());
//打印
System.out.println(Arrays.toString(set.toArray));
//使用for增强循环
for(Object obj : set){
    System.out.println(obj);
}

  1. Set接口存储一组唯一,无序的对象

  2. HashSet是Set接口常用的实现类

  3. Set中存放对象的引用

  1. Set接口如何判断加入对象是否已经存在呢?

采用对象的equals()方法比较两个对象是否相等

  1. HashSet是Set接口常用的实现类

Set接口不存在get()方法

迭代器Iterator

Collection 接口的iterator()方法创建iterator对象

iterator的方法

boolean hasNext():判断是否存在另一个可访问的元素

Objet next():访问要访问的下一个元素

//迭代器
//创建迭代器
Iterator it = set.iterator();
//hasNext 判断下一向是否有值
while(it.hasNext()){
    System.out.println(it.next());//获得当前值
}

如何遍历Set集合呢?

方法1:通过迭代器Iterator实现遍历

方法2:增强型for循环

  • 18
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值