黑马程序员—集合框架共性方法与迭代器

本文详细介绍了Java集合框架的基本概念及分类,包括List、Set、Map等主要接口的特点和实现类,如ArrayList、HashSet、HashMap等,并讲解了集合框架的通用方法及迭代器的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


  ------- android培训java培训、期待与您交流! ----------


一、体系概述

集合是一种特殊的容器它是用来存放任意类型的对象。长度可变,基本数据类型也可以装入集合。

但其实内部是先自动装箱包装成类对象,然后再存入的。

集合的分类:

  • 1.Collection
    • List: 可重复, 有存储顺序,有索引
      • ArrayList 数组实现, 增删慢, 查找快
      • LinkedList 链表实现, 增删快, 查找慢
      • Vector 数组实现, 原理和ArrayList相同, 但线程安全
    • Set: 不可重复,存取顺序不一致,无索引
      • HashSet 底层使用的是哈希表数据结构
      • TreeSet 底层是二叉树结构,可以对Set集合中的元素进行排序。

  • 2.Map 该集合存储键值对。一对一对往里存。而且要保证键的唯一性。
    • HashMap  底层是哈希表数据结构,不可以存入null键null值。该集合是线程同步的。
    • TreeMap 底层是二叉树数据结构。线程不同步。可以用于给map集合中的键进行排序。
    • Hashtable 底层是哈希表数据结构。允许使用null键null值,该集合是不同步的。

二、集合框架的一些共性方法

Collection定义了集合框架的共性功能。
1,添加
add(e);
addAll(collection);


2,删除
remove(e);
removeAll(collection);
clear();


3,判断。
contains(e);
isEmpty();


4,获取
iterator();
size();


5,获取交集。
retainAll();


6,集合变数组。
toArray();

注意:

1,add方法的参数类型是Object。以便于接收任意类型对象。
2,集合中存储的都是对象的引用(地址)


迭代器:

什么是迭代器呢?
其实就是集合的取出元素的方式。
如同抓娃娃游戏机中的夹子。


迭代器是取出方式,会直接访问集合中的元素。
所以将迭代器通过内部类的形式来进行描述。
通过容器的iterator()方法获取该内部类的对象。

class  CollectionDemo
{
public static void main(String[] args) 
{

method_get();
}
public static void method_get()
{
ArrayList al = new ArrayList();


//添加元素。
al.add("java01");//add(Object obj);
al.add("java02");
al.add("java03");
al.add("java04");



Iterator it = al.iterator();//获取迭代器,用于取出集合中的元素。


while(it.hasNext())
{
sop(it.next());
}



for(Iterator it = al.iterator(); it.hasNext() ; )
{
sop(it.next());
}
}

}


另外List集合中有自己特有的迭代器

List集合特有的迭代器。ListIterator是Iterator的子接口

在迭代时,不可以通过集合对象的方法操作集合中的元素。
因为会发生ConcurrentModificationException异常

所以,在迭代时,只能用迭代器的方法操作元素。可是Iterator方法时有限的。
只能对元素进行判断,取出,删除的操作。
如果想要其他的操作 如:添加,修改等。就需要使用其子接口ListIterator
该接口只能通过List集合的ListIterator方法获取。

class ListIteratorTest

{

public static void main(String[] args) 
{
//演示列表迭代器。


ArrayList al = new ArrayList();


//添加元素
al.add("java01");
al.add("java02");
al.add("java03");


sop(al);


ListIterator li = al.listIterator();
sop("hasNext():"+li.hasPrevious()); //与hasNext相反。判断反向(从后向前)有没有元素存在。这里结果为false。
//因为指针在开头,指针前没有元素。
while(li.hasNext())
{
Object obj = li.next();


if (obj.equals("java02"))
//li.add("java009");
li.set("java006");
}
sop("hasNext():"+li.hasNext());//结果为false.因为元素都已经取出。指针到了最末尾(最后一个元素后面)
sop("hasNext():"+li.hasPrevious());//这里结果为true。因为指针已经到了最后前面有元素。


while(li.hasPrevious())//逆向遍历所有元素
{
sop("pre::"+li.previous());//逆向取出所有元素。
}

}

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值