JAVA-集合概述/List

JAVA-集合

谁若游戏人生,他就一事无成;谁不能主宰自己,便永远是一个奴隶。——歌德

集合框架

这里写图片描述

Vector迭代器
/*
枚举就是Vector特有的取出方式。
发现枚举和迭代器很像。
其实枚举和迭代是一样的。

因为枚举的名称以及方法的名称都过长。
所以被迭代器取代了。
枚举郁郁而终了。



*/
class VectorDemo 
{
    public static void main(String[] args) 
    {
        Vector v = new Vector();

        v.add("java01");
        v.add("java02");
        v.add("java03");
        v.add("java04");

        Enumeration en = v.elements();

        while(en.hasMoreElements())
        {
            System.out.println(en.nextElement());
        }
    }
}
集合的上帝类 Collection

Collection定义了集合框架的共性功能。

Collection
    |--List:元素是有序的,元素可以重复。因为该集合体系有索引。
        |--ArrayList:底层的数据结构使用的是数组结构。特点:查询速度很快。但是增删稍慢。线程不同步。
        |--LinkedList:底层使用的链表数据结构。特点:增删速度很快,查询稍慢。线程不同步。
        |--Vector:底层是数组数据结构。线程同步。被ArrayList替代了。因为效率低。


    |--Set:元素是无序,元素不可以重复。
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,集合中存储的都是对象的引用(地址)

关于在List迭代器中删除和增加元素

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

该接口只能通过List集合的listIterator方法获取。
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("hasPrevious():"+li.hasPrevious());

        while(li.hasNext())
        {
            Object obj = li.next();

            if(obj.equals("java02"))
                //li.add("java009");
                li.set("java006");


        }

        while(li.hasPrevious())
        {
            sop("pre::"+li.previous());
        }
        //sop("hasNext():"+li.hasNext());
        //sop("hasPrevious():"+li.hasPrevious());


        sop(al);



        /*
        //在迭代过程中,准备添加或者删除元素。

        Iterator it = al.iterator();

        while(it.hasNext())
        {
            Object obj = it.next();

            if(obj.equals("java02"))
                //al.add("java008");
                it.remove();//将java02的引用从集合中删除了。

            sop("obj="+obj);


        }
        sop(al);
        */



    }
LinkedList
/*
LinkedList:特有方法:
addFirst();
addLast();

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

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


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

offerFirst();
offerLast();


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

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




*/
class LinkedListDemo 
{
    public static void main(String[] args) 
    {
        LinkedList link = new LinkedList();

        link.addLast("java01");
        link.addLast("java02");
        link.addLast("java03");
        link.addLast("java04");

        sop(link);
//      sop(link.getFirst());
//      sop(link.getFirst());
        //sop(link.getLast());
        //sop(link.removeFirst());
        //sop(link.removeFirst());

        //sop("size="+link.size());

        while(!link.isEmpty())
        {
            sop(link.removeLast());
        }

    }

    public static void sop(Object obj)
    {
        System.out.println(obj);
    }
}
/*

---
java01
java02
java03
java04

----
java04
java03
java02
java01
---
*/

用LinkedListTest来模拟堆栈

/*
使用LinkedList模拟一个堆栈或者队列数据结构。

堆栈:先进后出  如同一个杯子。
队列:先进先出 First in First out  FIFO 如同一个水管。



*/

import java.util.*;
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());
        }
    }
}
ArrayList
import java.util.*;

/*
去除ArrayList集合中的重复元素。

*/

class ArrayListTest 
{

    public static void sop(Object obj)
    {
        System.out.println(obj);
    }
    public static void main(String[] args) 
    {
        ArrayList al = new ArrayList();

        al.add("java01");
        al.add("java02");
        al.add("java01");
        al.add("java02");
        al.add("java01");
//      al.add("java03");


        /*
        在迭代时循环中next调用一次,就要hasNext判断一次。
        Iterator it = al.iterator();

        while(it.hasNext())
        {
            sop(it.next()+"...."+it.next());
        }
        */

        /**/
        sop(al);

        al = singleElement(al);

        sop(al);


    }

    public static ArrayList singleElement(ArrayList al)
    {
        //定义一个临时容器。
        ArrayList newAl = new ArrayList();

        Iterator it = al.iterator();

        while(it.hasNext())
        {
            Object obj = it.next();

            if(!newAl.contains(obj))
                newAl.add(obj);

        }

        return newAl;
    }
}

需要特别注意的是,每次调用next()方法,都会将迭代器的指针向下移动一次
一个利用ArrayList的小Demo

将自定义对象作为元素存到ArrayList集合中,并去除重复元素。
比如:存人对象。同姓名同年龄,视为同一个人。为重复元素。
思路:
1,对人描述,将数据封装进人对象。
2,定义容器,将人存入。
3,取出。
List集合判断元素是否相同,依据是元素的equals方法。
class Person
{
    private String name;
    private int age;
    Person(String name,int age)
    {
        this.name = name;
        this.age = age;
    }

    public boolean equals(Object obj)
    {

        if(!(obj instanceof Person))
            return false;

        Person p = (Person)obj;
        //System.out.println(this.name+"....."+p.name);

        return this.name.equals(p.name) && this.age == p.age;
    }
    /**/
    public String getName()
    {
        return name;
    }
    public int getAge()
    {
        return age;
    }
}
class ArrayListTest2 
{
    public static void sop(Object obj)
    {
        System.out.println(obj);
    }
    public static void main(String[] args) 
    {
        ArrayList al = new ArrayList();

        al.add(new Demo());

        al.add(new Person("lisi01",30));//al.add(Object obj);//Object obj = new Person("lisi01",30);
        //al.add(new Person("lisi02",32));
        al.add(new Person("lisi02",32));
        al.add(new Person("lisi04",35));
        al.add(new Person("lisi03",33));
        //al.add(new Person("lisi04",35));


        //al = singleElement(al);

        sop("remove 03 :"+al.remove(new Person("lisi03",33)));//remove方法底层也是依赖于元素的equals方法。


        Iterator it = al.iterator();


        while(it.hasNext())
        {
            Person p = (Person)it.next();
            sop(p.getName()+"::"+p.getAge());
        }
    }


    public static ArrayList singleElement(ArrayList al)
    {
        //定义一个临时容器。
        ArrayList newAl = new ArrayList();

        Iterator it = al.iterator();

        while(it.hasNext())
        {
            Object obj = it.next();

            if(!newAl.contains(obj))
                newAl.add(obj);

        }

        return newAl;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值