「Java基础」集合框架

Java 集合框架

1 集合的体系介绍

在这里插入图片描述
上图为Java集合体系介绍,本片介绍 ArrayList、LinkedList、Collection、Vector由于用的不多,不过多介绍。

java集合框架的建立是围绕着一个祖先接口Collection完成的,Collection里定义了几盒的框架性功能,对于数据的处理,添加、删除、判断、获取、获取交集、集合变数组

1,添加
	add(e);
	addAll(collection);

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

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

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

5,获取交集。
	retainAll();

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

2 Iterator

迭代器是什么?

迭代器的作用是从集合中取出元素,它只是一种取出方式,迭代器可以直接访问集合元素,可以通过容器中的方法iterator( )进行数据访问。

迭代器是怎么实现功能的?

其实取出方式就定义在集合的内部,比如在ArrayList集合中、也可以在LinkedList集合中,或者在Vector中,不同的集合有不同的取出方法,也有一些集合特有的方法,帮助java对数据进行操作,需要强调的点有:

  • Iterator( )容器方法,将不同集合的不同方法访问数据的方法进行了共性抽取
  • 它们都有各自判断取出的方法
  • 取出方式定义在集合内部,可以直接访问集合内的元素

在这里插入图片描述

3 集合体系中的重点内容

上面的集合框架内容太多了,如果只要我们需要的话
在这里插入图片描述

  • Collection:集合的接口祖先,定义着集合的功能性框架
    • List:元素是有序的,元素可以重复。因为该集合体系有索引。
      • ArrayList:底层的数据结构使用的是数组结构。特点:查询速度很快。但是增删稍慢。线程不同步。
      • LinkedList:底层使用的链表数据结构。特点:增删速度很快,查询稍慢。线程不同步。
      • Vector:底层是数组数据结构。线程同步。被ArrayList替代了。因为效率低。
    • Set:元素是无序,元素不可以重复。

关于list的特有方法?

特有方法。凡是可以操作角标的方法都是该体系特有的方法。
增
	add(index,element);
	addAll(index,Collection);remove(index);set(index,element);get(index):
	subList(from,to);
	listIterator();
	int indexOf(obj):获取指定元素的位置。
	ListIterator listIterator();

5 ListItreator迭代器

关于list迭代,一般有两种写法,一个是使用普通的列表操作,另一个是使用迭代器,需要注意,对于同一组list集合,能进行迭代的方式只有一种,否则会出现并发访问的错误,意思就是,不能同时在迭代器对象中使用collection集合内定义的方法:

Iterator it = al.iterator()

while(it.hasNext())
{
	Object obj = it.next();
	if(obj.equals("java02"))
		al.add("java08");// 到底是取出呢?还是加入呢?

	sop("obj="obj);
}
  1. list集合有自己特有的迭代器listIterator(),它是Iterator()的子接口
  2. 但是迭代器内没有加入的方法,怎么办么?使用Iterator()的子接口listIterator()帮助完成加入。

6 Linkedlist中存在的特有方法,模拟堆栈与队列

LinkedList:特有方法:
addFirst();
addLast();

getFirst();
getLast();
获取元素,但不删除元素。如果集合中没有元素,会出现NoSuchEle  mentException

removeFirst();
removeLast();
获取元素,但是元素被删除。如果集合中没有元素,会出现NoSuchElementException


在JDK1.6出现了替代方法。

offerFirst();
offerLast();


peekFirst();
peekLast();
获取元素,但不删除元素。如果集合中没有元素,会返回null。

pollFirst();
pollLast();
获取元素,但是元素被删除。如果集合中没有元素,会返回null。

但是它可以做的事情是什么呢? 他可以模拟队列、堆栈两种数据结构

队列:先进先出,像一个水管。
堆栈:先进后出,像一个杯子。

队列的模仿:
class DuiLie
{
	private LinkedList link;

	DuiLie()
	{
		link = new LinkedList();
	}
	
	public void myAdd(Object obj)
	{
		link.addFirst(obj);
	}
	public Object myGet()
	{
		return link.removeFirst();
	}
	public boolean isNull()
	{
		return link.isEmpty();
	}

}

class  LinkedListTest
{
	public static void main(String[] args) 
	{
		DuiLie dl = new DuiLie();
		dl.myAdd("java01");// 在头部加
		dl.myAdd("java02");
		dl.myAdd("java03");
		dl.myAdd("java04");

		while(!dl.isNull())
		{
			System.out.println(dl.myGet());// 在尾部取出
		}
		System.out.println(dl);
	}
}

删除ArrayList中的重复元素

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

public class ArryListDemo {
    public static void main(String[] args)
    {
        ArrayList al = new ArrayList();
        al.add("java_1");
        al.add("java_2");
        al.add("java_3");
        al.add("java_4");
        al.add("java_2");
        al.add("java_3");
        al.add("java_1");
    sop(al);
    al = singleArr(al);
    sop(al);
    }
    public static void sop(Object obj)
    {
        System.out.println(obj);
    }
    public static ArrayList singleArr(ArrayList arr)
    {
        ArrayList NewAl = new ArrayList(); // 新建空列表,剔除多余元素
        Iterator arr_I = arr.iterator(); // 将传入进行迭代

        while (arr_I.hasNext())
        {
            Object obj = arr_I.next();
            if(!NewAl.contains(obj)) // 进行判断,是否加入

                NewAl.add(obj);

        }
        return NewAl;
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值