博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
day14 集合框架--ArrayList容器 linkedlist
阅读量:4885 次
发布时间:2019-06-11

本文共 9908 字,大约阅读时间需要 33 分钟。

集合框架:Collection
为什么会出现这么多的容器呢?
因为每一个容器对数据的存储方式都有不同,
这个存储方式称之为:数据结构
CollectionDemo
创建一个集合容器。使用Collection接口的子类,ArrayList
/*
1,add方法的参数类型是Object。以便于接受任意类型对象。
    
2,集合中存储的都是对象的引用(地址)
*/

import java.util.*;class CollectionDemo{    public static void main(String[] args)    {        base_method();            }        public static void base_method()    {                //ArrayList al = new ArrayList();                //1,添加元素        //al.add("java01");        //al.add("java02");        //al.add("java03");        //al.add("java04");        //打印原集合        //sop("scr:"+al);        //清空        //al.clear();                //al.remove("java02");        //获取元素个数,集合长度。        //sop("size:"+al.size());        //System.out.println("");        //判断元素是否存在        //sop(al.contains("java03"));                //sop(al.isEmpty());//集合是否为空。                sop(al);        ArrayList al = new ArrayList();        al.add("java01");        al.add("java02");        al.add("java03");        al.add("java04");                ArrayList all = new ArrayList();        all.add("java05");        all.add("java06");        all.add("java01");        all.add("java02");                al.retainAll(all);//取交集,al中只会保存于all中相同的元素。                sop("al:"+al);        sop("all:"+all);                    }    public static void sop(Object obj)    {        System.out.println(obj);    }}

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

什么是迭代器呢?
其实就是集合的取出元素的方式。
就把取出方式定义在集合的内部,
这样取出方式就可以直接访问集合内容的元素。
那么取出方式就被定义成了内部类。
而每一个容器的数据结构不同,所以取出的动作细节也不一样。
但是都有共性内容判断和取出。那么可以将写共性抽取。
那么这些内部类都符合一个规则。该规则是Iterator
如何获取集合的取出对象呢
通过一个对外提供的方法。Iterator();

import java.util.*;class ListDemo{    public static void main(String[] args)    {        base_method();            }        public static void base_method()    {        ArrayList al = new ArrayList();                        al.add("java01");        al.add("java02");        al.add("java03");        //al.add(1,"java09");        //sop(al);                //al.remove(2);        //sop(al);        //al.set(2,"java007");        //sop("get:"+al.get(1));        //sop("index="+al.indexOf("java02"));        //List sub = al.subList(1,3);        //sop("sub="+sub);        ListIterator it = al.listIterator();                while(it.hasNext())        {            Object obj = it.next();                        if(obj.equals("java02"))                it.add("java09");                                }        sop(al);            }    public static void sop(Object obj)    {        System.out.println(obj);    }}

Collection

      |--List;元素是有序的,元素可以重复,因为该集合体系有索引。
        |--ArrayList:底层的数据结构使用的是数组结构。特点:查询速度很快,增删比较慢。线程不同步
            
        |--LinkedList :底层的数据结构使用的是链表数据结构。特点:增删速度快,查询比较慢
        |--Vector  :底层是数组数据结构。线程同步 被ArrayList替代。
    |--Set ;元素是无序的,元素不可以重复。
        |--HashSet
        |--TreeSet
    
list:
    特有方法:凡是可以操作角标的方法都是该体系特有的方法。
    add(index,element)
    addAll(index,Collection)
    remove(index)
    set(index,element)
    get(index)
    subList(from,to)
    listIterator()
    
    
List集合特有的迭代器:ListIterator 是Iterator的子接口
在迭代时,不可以通过集合对象的方法操作集合中的元素。
因为会发生ConcurrentModificationException异常。
所以,在迭代器时,只能用迭代器的方法操作元素,可是Iterator方法是有限的
只能对元素进行判断,取出,删除的操作,
如果想要其他的操作如添加修改等,就需要使用起子接口,ListIterator。
该接口这能通过list集合的listiterator方法获取。

=========================================

枚举就是Vector 特有的取出方式
发现枚举和迭代器很像。
其实枚举和迭代是一样的。
因为枚举的名称以及方法的名称都过长。
所以被迭代器取代了
枚举郁郁而终

import java.util.*;  class VectorDemo {     public static void main(String[] args)     {         Vertor 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());         }                       } }

 

Linklist

LinkedList:特有方法:
=====================
addFirst()
addLast()
=====================
获取元素
getFirst()
getLast()
=====================
获取元素但是元素被删除,如果集合中没有元素,会返回NoSuchElementException
removeFirst()
removeLast()
在JDK1.6出现了替代方法,如果集合中没有元素,会返回NoSuchElementException
offerFirst()
offerLast()
peekFirst()
peekLast()
获取元素但是元素被删除,如果集合中没有元素,会返回null
pollFirst()
pollLast();
获取元素但是元素被删除,如果集合中没有元素,会返回null

import java.util.*;  class LinkedListDemo {     public static void main(String[] args)     {         LinkedList v = new LinkedList();                  v.addFirst("java01");         v.addFirst("java02");         v.addFirst("java03");         v.add-First("java04");                           sop(v);          }     public static void sop(Object obj)    {        System.out.println(obj);        }          }

练习:使用linkedlist模拟一个堆栈或队列数据结构

 

import java.util.*;          class LinkedListDemo     {         public static void main(String[] args)         {            duilie dl = new duilie();            dl.myadd("java01");            dl.myadd("java02");            dl.myadd("java03");            dl.myadd("java04");                     System.out.println(dl.myget());         }         public static void sop(Object obj)        {            System.out.println(obj);            }                  }         class duilie    {        private LinkedList link;        duilie()        {            link = new LinkedList();        }        public void myadd(Object obj)        {            link.addFirst(obj);        }        public Object myget()        {            return link.removeLast();        }        public boolean isNull()        {            return link.isEmpty();        }    }

 练习:

去除arraylist集合中的重复元素。

import java.util.*;          class ArrayListTest     {         public static void main(String[] args)         {            ArrayList dl = new ArrayList();            dl.add("java01");            dl.add("java02");            dl.add("java02");            dl.add("java04");                     sop(dl);            dl = singleElement(dl);                        sop(dl);         }         public static void sop(Object obj)        {            System.out.println(obj);            }        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;        }                  }

练习:

将自定义对象作为元素存到ArrayList集合中,并去除相同元素。
比如 :存人
同姓名同年龄是为同一个人。为同一个人。
list集合判断元素是否相同,调用contains函数,这函数依据的元素的equals方法。

import java.util.*;                class person     {         private  String name ;         private  int age;                  person(String name,int age)         {             this.name=name;             this.age=age;         }                           public String getname()         {             return name;         }         public int getage()         {             return age;         }         public boolean equals(Object obj)         {             if(!(obj instanceof person))                 return false;             person p  =(person)obj;                          return this.name.equals(p.name)&&this.age == p.age;         }              }             class ArrayListTest     {         public static void main(String[] args)         {            ArrayList dl = new ArrayList();            dl.add(new person("lisi01",30));            dl.add(new person("lisi02",32));            dl.add(new person("lisi02",32));            dl.add(new person("lisi03",33));            dl.add(new person("lisi04",35));            dl.add(new person("lisi04",35));                        dl=singleElement(dl);                        Iterator it = dl.iterator();                        while(it.hasNext())            {                person p = (person) it.next();//Object obj = it.next(); person p = (person) obj;                sop(p.getname()+":...:"+p.getage());            }         }         public static void sop(Object obj)        {            System.out.println(obj);            }        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;        }                  }

 

|--Set ;元素是无序的(存入和取出的顺序不一定一致),元素不可以重复。
        |--HashSet:底层数据结构是哈希表
            HashSet是如何保证元素唯一性呢
            是通过元素的两个方法,hashCode和equals来完成的
            如果元素的HashCode值相同,才会判断equals是否为true
            如果元素的hashcode值不同,不会调用equals
            
            注意,对于判断元素是否存在,以及删除等操作,依赖的方法是元素的hashcode和equals方法
            
        |--TreeSet
        
Set集合的功能和Collection是一致的。
往hashset集合中存入自定义对象
姓名和年龄相同为同一个,重复元素。
      set练习:

import java.util.*;     class person     {         private  String name ;         private  int age;                  person(String name,int age)         {             this.name=name;             this.age=age;         }         public int hashCode()        {            return 30;        }                  public String getname()         {             return name;         }         public int getage()         {             return age;         }         public boolean equals(Object obj)         {             if(!(obj instanceof person))                 return false;             person p  =(person)obj;                          return this.name.equals(p.name)&&this.age == p.age;         }              }            class HashSetDemo{        public static void main(String[] args)    {        HashSet hs = new HashSet();        hs.add(new person("java01",11));        hs.add(new person("java02",12));        hs.add(new person("java02",12));        hs.add(new person("java03",13));        hs.add(new person("java04",14));                Iterator it = hs.iterator();                while(it.hasNext())        {            person p = (person)it.next();            sop(p.getname()+"::"+p.getage());        }    }        public static void sop(Object obj)    {        System.out.println(obj);    }}

 

转载于:https://www.cnblogs.com/WDKER/p/5641466.html

你可能感兴趣的文章
ZooKeeper管理员指南——部署与管理ZooKeeper
查看>>
3.进程的不同状态
查看>>
第三次作业
查看>>
行为树(Behavior Tree)实践(1)– 基本概念
查看>>
性能调优攻略
查看>>
Sublime 学习记录(二) package control 组件
查看>>
Emacs和Vim:神的编辑器和编辑器之神
查看>>
程序员必备基础——数据结构与算法学习资料分享01
查看>>
完成个人中心—导航标签
查看>>
matplotlib之散点图
查看>>
DML 语句
查看>>
swift------导入OC三方类找不到头文件的解决方法
查看>>
POJ 1703 Find them, Catch them (并查集)
查看>>
利用Java对本地磁盘的文件重命名
查看>>
【bzoj3648】环套树+点分治+树状数组
查看>>
折线 散点图
查看>>
小程序视图层(xx.xml)和逻辑层(xx.js)
查看>>
xml学习3
查看>>
servlet 学习笔记(三)
查看>>
在CentOS 7下更改yum源与更新系统
查看>>