集合框架2
来源:互联网 发布:mac os sierra beta3 编辑:程序博客网 时间:2024/06/07 06:26
集合框架2
集合框架2是相对于集合框架概述而且的,内容上前后衔接。
1.迭代器
迭代器:集合的取出元素的方法。
注意:打印只能看到元素,并不能操作集合中的元素。
集合吧取出方式定义在集合的内部,这样取出方式就定义成了内部类。每一个容器的数据结构不同,所取出的动作细节也不一样。但是都有共性内容:判断和取出。那么可以将内容进行共性抽取。
这些内部类都符合一个规则。该规则是Iterator。如何获取集合中对外取出的对象呢?
通过一个对外提供的方法iterator()。
2.List
元素是有序的,元素可以重复,因为该集合体系有索引。
凡是可以操作角标的方法都是该体系特有的方法。
Iterator在迭代式,一般能移除集合中元素,但不可以通过集合对象的方法操作集合中的元素,因为胡出现并发修改异常(注意,是集合的方法,要和迭代器的方法区分开来)
List有自己特有的迭代器ListIterator,可以进行添、删、修改元素,(注意是ListIterator的方法)
这里Collection的一般方法就不演示了。
package CSDN.review;import java.util.*;public class IteratorDemo {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubList<String> list = new ArrayList<String>();list.add("abc");list.add("sdfe");list.add("jxofi");for(Iterator<String> it=list.iterator();it.hasNext();){System.out.println(it.next());}System.out.println("________________");for(int i=0;i<list.size();i++){System.out.println(list.get(i));}//list的特有方法list.add(1, "bc");List<String> list2=list.subList(0, 3);//包含头不包含尾System.out.println(list2);//特有迭代器ListIterator<String> li= list.listIterator();//产生迭代器时,指针指向第一个元素while(li.hasNext()){System.out.println("特有迭代器"+li.next());}//while(li.hasNext()){//System.out.println("特有迭代器"+li.next());//}再跌打一次,因为指针已经指向结尾所以不会打印while(li.hasPrevious()){System.out.println("逆向迭代"+li.previous());//注意指针指向}//li的修改操作for(;li.hasNext();){Object obj= li.next();if("bc".equals(obj))li.add("添加");System.out.println("同步操作"+obj);//注意:在obj后面添加}System.out.println(li);System.out.println(list);}}注意:迭代器迭代过程中,每执行一次.next()方法,指针向后移一位,对应的元素相应发生改变,如集合中["1","2","3"],it.next()等于“1”后,再出现一次it。next(),值就等于“2‘了 3.List的三个实现类的子类的特点
(1)ArrayList:底层为数组结构 查询快,增删慢,线程不同步; 底层为元素10个的数组,超过时,每次扩容50%,第一次为15个元素; ArrayList的应用:将ArrayList中重复的元素去掉
package CSDN.review;import java.util.*;public class ArrayListTest {/** * 将ArrayList中重复的元素去掉 * @param args */public static void main(String[] args) {// TODO Auto-generated method stubArrayList<String> list = new ArrayList<String>();list.add("singleElement1");list.add("singleElement2");list.add("singleElement1");list.add("singleElement2");list.add("singleElement3");list.add("singleElement1");System.out.println(list);System.out.println(singleElement(list));;}public static ArrayList singleElement(ArrayList list){ArrayList newList= new ArrayList();ListIterator li= list.listIterator();while(li.hasNext()){Object obj= li.next();if(!newList.contains(obj))newList.add(obj);}return newList;}}将普通类的实例存入ArrayList中,相同属性的实例不能存入(比较有实际意义)
package CSDN.review;import java.util.*;public class ArrayListTest2 {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubArrayList list = new ArrayList();list.add(new Person("zhangsan",18));list.add(new Person("zhangsan",18));list.add(new Person("zhangsan1",19));list.add(new Person("zhangsan1",19));list.add(new Person("zhangsan2",20));System.out.println(list);System.out.println(singleElement(list));}public static List singleElement(ArrayList list){ArrayList newList= new ArrayList();ListIterator li= list.listIterator();while(li.hasNext()){Object obj=li.next();if(!newList.contains(obj))newList.add(obj);}return newList ;}}class Person{private String name;private int age;Person(){}Person(String name,int age){this.name=name;this.age=age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Override 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;}@Overridepublic String toString() {return "Person [name=" + name + ", age=" + age + "]";}}(2)LinkedList:
底层使用的是链表数据结构;
增删快,查询慢,线程不同步;
增删快,查询慢,线程不同步;
特有方法:
ackage CSDN.review;import java.util.*;public class LinkedListDemo {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubLinkedList<String> list= new LinkedList<String>();list.add("LinkedList1");list.add("LinkedList2");list.add("LinkedList3");list.add("LinkedList4");System.out.println(list.getFirst());//获取第一个元素,如果集合为空,返回异常System.out.println(list.removeFirst());//获取第一个元素,并删除,集合为空返回异常list.addFirst("LinkedList1");//独有的迭代方式//while(!list.isEmpty()){//System.out.println(list.removeFirst());//}//逆向获取//while(!list.isEmpty()){//System.out.println(list.removeLast());//}System.out.println(list.peekFirst());//获取第一个元素,没有返回nullSystem.out.println(list.pollFirst());//获取第一个元素,并移除,没有返回nulllist.offerFirst("LinkedList1");System.out.println(list);}}实例应用:
package CSDN.review;import java.util.*;public class LinkedListDemo2 {/** * 使用LinkedList 模拟一个堆内存或者队列数据结构 * 栈内存:先进后出 * 队列:先进先出:FIFO * @param args */public static void main(String[] args) {// TODO Auto-generated method stubDuiLie dl =new DuiLie();dl.add("object1");dl.add("object2");dl.add("object3");dl.add("object4");while(!dl.isNull()){System.out.println(dl.get());}}}class DuiLie{private LinkedList<Object> list;DuiLie(){ list = new LinkedList<Object>();}public void add(Object obj){list.add(obj);}public Object get(){return list.removeFirst();//先进先出//return list.removeLast(); 先进后出}public boolean isNull(){return list.isEmpty();}}(3)Vector
底层是数组的数据结构
线程同步,(一般线程同步是安全的,线程不同步是不安全的),局部被ArrayList替代了;
底层为10个元素的数组,每次扩容增加100%,比较浪费内存。
package CSDN.review;import java.util.*;public class VectorDemo {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubVector<String> v= new Vector<String>();v.add("vector1");v.add("vector2");v.add("vector3");v.add("vector4");Enumeration<String> en = v.elements();//Vector特有的迭代方式while(en.hasMoreElements()){System.out.println(en.nextElement());}}}
基础阶段,list差不多就这些内容了。
0 0
- 集合框架-Collection集合-2
- 集合框架-List集合-2
- 集合框架(2)
- 集合框架(2)
- 集合框架2
- 集合框架2
- 集合框架2
- 集合框架总结2
- 集合框架2
- 集合框架2
- Java集合框架-2
- Java集合框架--2
- JavaSE 集合框架(2)- Set集合
- 【2】集合与通用框架
- 【2】集合与通用框架
- 黑马程序员-集合框架2
- 集合框架——2
- 集合框架篇2 Collection
- C3PO与oracle数据库
- Python正则表达式详解
- strstr函数
- CodeForces 233A
- UVa OJ 105 - The Skyline Problem
- 集合框架2
- Android Matrix 介绍
- 【iOS开发-22】navigationBar导航条和navigationItem设置:基本搞定导航条上的文字和按钮以及各种跳转
- MySql数据库的基本操作-表数据中的 设置外键约束
- chrome常用快捷键
- poj 递增栈 POJ2796 区间最大参考值 3250牛的视野
- BMP文件格式探索
- C++primer 第五版 练习题【3.32】 P104页 个人解答
- 嵌入式linux web服务器boa的移植方法/arm开发板linux嵌入式web服务器boa