黑马程序员----JAVASE之集合操作【上】
2013-11-17 20:24
239 查看
-------------- android培训、java培训、期待与您交流!
---------------
1.集合体系
集合是用来存储和管理其他对象的对象,即对象的容器。集合可以扩容,长度可变,可以存储多种类型的数据而数组长度不可变,只能存储单一类型的元素。
Java平台提供了一个全新的集合框架。“集合框架”主要由一组用来操作对象的接口组成。不同接口描述一组不同数据类型。(如图)
从上图可以发现:
集合接口:6个接口,表示不同集合类型,是集合框架的基础。
抽象类:5个抽象类,对集合接口的部分实现。可扩展为自定义集合类。
实现类:8个实现类,对接口的具体实现。
其中我们可以根据图可以看出集合框架可以分为两个部分,一个是Collection集合体系部分,一个是Map体系部分。
2.Collection接口
<
4000
span style="color:rgb(73,73,73);font-family:simsun;line-height:21px;">用于表示任何对象或元素组。想要尽可能以常规方式处理一组元素时,就使用这一接口。
Collection体系:
|--List:元素是有序的,元素可以重复。因为该集合体系有索引。
|--ArrayList:底层的数据结构使用的是数组结构。特点:查询速度很快。但是增删稍慢。线程不同步。
|--LinkedList:底层使用的链表数据结构。特点:增删速度很快,查询稍慢。线程不同步。
|--Vector:底层是数组数据结构。线程同步。被ArrayList替代了。因为效率低。
|--Set:元素是无序,元素不可以重复。
3.List接口
* ArrayList
在实际开发中比较常用的,底层使用的是数组的数据结构,所有在查询速度上比较快,但是增删稍慢,在实际开发中如果
我们对数据的查询的时候我们可以选择这中List进行存储数据。
* List接口的特有方法。
增
add(index,element);
addAll(index,Collection);
删
remove(index);
改
set(index,element);
查
get(index):
subList(from,to);
listIterator();
int indexOf(obj):获取指定元素的位置。
ListIterator listIterator();
List集合特有的迭代器。ListIterator是Iterator的子接口。
ArrayList al = new ArrayList(); al.add("java01"); al.add("java02"); al.add("java03"); sop(al); ListIterator li = al.listIterator(); while(li.hasNext()) { Object obj = li.next(); if(obj.equals("java02")) li.set("java006"); } while(li.hasPrevious()) { sop("pre::"+li.previous()); }一下为常见案例
1.去除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("java01"); 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; } }
其实我们在去除List集合的重复元素的的时候我们可以利用Set集合的构造方法去除即:
Set set = new HashSet(list);
然后在List list = new ArrayList(set);就OK了。
其实在去除重复元素的内部原理就是利用了equals方法。如果我们在一个去除重复元素时我们可以重写一下equals就OK了。
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; } //contains原理为调用equals,这里实现equals的覆盖,比较对象中姓名及年龄是否全一样 public boolean equals(Object obj) { if (!obj instanceof Person) return false; Person e = (Person)obj; //向下转型 return this.name.equals(e.name) && this.age==e.age; } } class ArrayListTest { public static void main(String[] args) { ArrayList al = new ArrayList(); al.add(new Person("zhangsan",12)); al.add(new Person("lisi",13)); al.add(new Person("wangwu",12)); al.add(new Person("xiaomei",14)); al.add(new Person("lisi",13)); al = singleElements(al); for (Iterator it = al.iterator(); it.hasNext(); ) { Person p = (Person)it.next(); //向下转型 sop(p.getName()+"~~"+p.getAge()); } } //去除重复方法 public static ArrayList singleElements(ArrayList al) { ArrayList newal = new ArrayList(); for (Iterator it = al.iterator(); it.hasNext(); ) { Person p = (Person)it.next(); if (!newal.contains(p)) newal.add(p); } return newal; } public static void sop(Object obj) { System.out.println(obj); } }
* LinkList
底层使用的链表数据结构,所有增删速度很快,但查询稍慢。在实际开发中如果项目中涉及到比较多对数据的增删等操作时,我们可以优先考虑使用LinkList。
LinkedList特有方法:
1.增加元素:
addFirst();
addLast();
2.获取元素,但不删除元素。如果集合中没有元素,会出现NoSuchElementException
getFirst();
getLast();
3.删除元素
removeFirst();
removeLast();
注意:在JDK1.6出现了替代方法:
offerFirst();
offerLast();
peekFirst();
peekLast();
pollFirst();
pollLast();
使用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()); } } }
-------------- android培训、java培训、期待与您交流!
---------------
相关文章推荐
- 黑马程序员--集合操作
- JavaSe总结-19- 集合总结(5)&异常&文件操作
- 黑马程序员——javaSE_集合框架-Collection
- 黑马程序员——Java基础——集合工具类Collecions、Arrays、其他对象System类、Runtime类、Date类、Calendar类、Math类等操作
- 黑马程序员——JavaSE之集合框架一
- 黑马程序员_JavaSE基础05 之 数组的操作 求最值 排序 折半查找
- 黑马程序员——JavaSE之集合框架总结二
- 黑马程序员_JavaSE基础06 之 数组的操作 求最值 排序 折半查找
- 黑马程序员------Foundation框架------OC集合类的操作
- 黑马程序员-JAVASE入门(Map集合)
- 黑马程序员--反射--实现一个简单的集合操作框架
- 黑马程序员——javase基础--集合
- 黑马程序员-javaSE学习之集合框架
- 黑马程序员----JAVASE之IO流操作【字符流】
- 黑马程序员 JavaSE-08 Collection(集合)
- 黑马程序员--读写字节数组,随机读写流,集合IO的思维导图,多线程部分,单例设计模式,线程和进程的概念,Java中的线程的创建方式,线程的随机性,线程的状态图,多线程操作共享数据的安全性,死锁
- 黑马程序员--javaSE--java集合容器总结
- 黑马程序员-JAVASE入门(集合Set)
- 黑马程序员----JAVASE之IO流操作【认知篇】
- 黑马程序员_JavaSE基础17 之 集合框架 Vector LinkedList ArrayList HashSet LinkedHasSet TreeSet