java_Collection_List
2015-10-10 20:24
323 查看
Collection
层次结构中的根接口,Collection 表示一组对象,这些对象也称为 collection 的元素。
它提供更具体的子接口(如 Set 和 List)实现,本文主要介绍List
|--List:元素的有序的,元素可以重复。因为该集合体系有索引
|--ArrayList:底层的数据结构使用的是数组结构,特点:查询速度快,增删稍慢,线程不同步
|--LinkedList:底层的数据结构使用的是链表,特点:增删速度快。查询稍慢
|--Vector
|--Set: 元素是无序的,元素不可以重复。
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方法获取。
代码演示:
ArrayList
1 练习去除ArrayList中的重复元素认识ArrayList
代码演示
2将自定义对象作元素为元素存到ArrayList集合中,并去除重复
比如村人对象,同姓名同年龄,视为同一个人,为重复元素
思路:
1 对人描述,将数据封装进人对象
2 定义容器,将人存入
3 取出
代码演示:
LinkedList
练习模拟模拟一个堆栈或者队列数据结构
堆栈:先进后出
队列:先进先出
层次结构中的根接口,Collection 表示一组对象,这些对象也称为 collection 的元素。
它提供更具体的子接口(如 Set 和 List)实现,本文主要介绍List
|--List:元素的有序的,元素可以重复。因为该集合体系有索引
|--ArrayList:底层的数据结构使用的是数组结构,特点:查询速度快,增删稍慢,线程不同步
|--LinkedList:底层的数据结构使用的是链表,特点:增删速度快。查询稍慢
|--Vector
|--Set: 元素是无序的,元素不可以重复。
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方法获取。
代码演示:
import java.util.*; class ListDemo { public static void method() { ArrayList al = new ArrayList(); al.add("java01"); al.add("java02"); al.add("java03"); sop("原集合"+al); al.add(1,"java09"); sop(al); //删除指定位置的元素 //al.remove(2); //通过角标获取元素 sop("get(1):"+al.get(1)); sop(al); for(int x=0; x<al.size(); x++) { sop("al("+x+")="+al.get(x)); } for(Iterator it = al.iterator(); it.hasNext();) { sop(it.next()); } //通过indexof获取对象的位置 sop("Index="+al.indexOf("java02")); List sub = al.subList(1,3); sop("sub="+sub); } public static void main(String[] args) { ArrayList al = new ArrayList(); al.add("java01"); al.add("java02"); al.add("java03"); ListIterator li = al.listIterator(); while(li.hasNext()) { Object obj = li.next(); if(obj.equals("java02")) //li.add("java07"); li.set("java008"); } while(li.hasPrevious()) { sop("pre::"+li.previous()); } sop("hasNext():"+li.hasNext());//后面有没有元素 sop("hasPrevious():"+li.hasPrevious());//前面有没有元素 sop(al); /* for(Iterator it = al.iterator(); it.hasNext();) { Object obj = it.next(); //注意!!!!! if(obj.equals("java02"))//一个是集合操作al,一个是迭代器操作obj //al.add("java07");//会出错报异常ConcurrentModificationException异常。 it.remove(); sop(it.next()); } */ } public static void sop(Object obj) { System.out.println(obj); } }
ArrayList
1 练习去除ArrayList中的重复元素认识ArrayList
代码演示
import java.util.*; 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("java03"); al.add("java04"); sop(al); al = singleElement(al); sop(al); System.out.println("Hello World!"); } 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; } }
2将自定义对象作元素为元素存到ArrayList集合中,并去除重复
比如村人对象,同姓名同年龄,视为同一个人,为重复元素
思路:
1 对人描述,将数据封装进人对象
2 定义容器,将人存入
3 取出
代码演示:
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)//equals()是自动调用的 { if(!(obj instanceof Person)) return false; Person p = (Person)obj; return this.name.equals(p.name) && this.age == p.age; } } class ArrayListTest2 { public static void main(String[] args) { ArrayList al = new ArrayList(); al.add(new Person("lisi01",31));//al.add(Object obj);//Object obj = new Person("Lisi01",30)//向上转型返回的是object al.add(new Person("lisi02",32)); al.add(new Person("lisi02",32)); al.add(new Person("lisi03",33)); al.add(new Person("lisi04",34)); al.add(new Person("lisi04",34)); al = singleElement(al); Iterator it = al.iterator(); while(it.hasNext()) { //Object obj = it.iterator(); //Person p = (Person)obj;//注意强制转换 Person p = (Person)it.next(); //sop(it.next().getName()+"::"+it.next.getAge()); sop(p.getName()+"::"+p.getAge()); } System.out.println("Hello World!"); } 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; } }
LinkedList
练习模拟模拟一个堆栈或者队列数据结构
堆栈:先进后出
队列:先进先出
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()); } System.out.println("Hello World!"); } }总结:代码难度不大,但是也要达到熟练,掌握每个知识点
相关文章推荐
- struts 2配置默认的Action
- Java基础知识强化之集合框架笔记73:如何选择使用哪种集合
- Java声明和定义
- 一道排序笔试题,在o(n)时间内对一个数组进行排序
- Java
- java md5加密字符
- 【第4节】Java代码实现栈--小例子--分隔符匹配
- 【第4节】Java代码实现栈--小例子--单词逆序
- 【第4节】栈的Java代码实现,【数组形式存储】
- Java开发工具
- Java语言基础(数组概述和定义格式说明)
- Java语言基础(常量的概述和使用)
- [leetcode]Palindrome Linked List
- 静态页面和动态页面
- Java SE学问Random
- 配置Spring <context:annotation-config/>的作用
- Java Socket学习---nio实现阻塞多线程通信
- Java基础篇-集合
- Spring Boot实践应用开发(6)
- java动态代理(JDK和cglib)