黑马程序员——集合(上)
来源:互联网 发布:淘宝卖家温馨寄语 编辑:程序博客网 时间:2024/05/23 05:09
——- android培训、java培训、期待与您交流! ———-
1.1,为什么出现集合类?
面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,就对对象进行存储,集合就是存储对象最常用的一种方式。
1.2,数组和集合类同是容器,有何不同?
数组虽然也可以存储对象,但长度是固定的;集合长度是可变的。数组中可以存储基本数据类型,集合只能存储对象。
1.3,集合类的特点
集合只用于存储对象,集合长度是可变的,集合可以存储不同类型的对象。
1.4,Collection
Collection集合框架中的一个顶层接口,它里面定义了单列集合的共性方法,
它有两个常用的子接口list和set。
Collection
|–List//元素是有序的,元素可以重复。因为该集合体系有索引。
|–Set//元素是无序的,元素不可以重复。
1.5,Collection接口中的常见操作
1、添加元素
add(Objectobj); //add方法的参数类型是Object。以便于接收任意类型对象。
2、删除元素
remove(Objectobj);
removeAll(另一集合);//调用者只保留另一集合中没有的元素。
clear();//清空集合
3、判断元素
contains(Objectobj);//判断是否存在obj这个元素
isEmpty();//是否为空
4、获取
iterator();
size();
5、获取交集
retainAll(另一集合);//调用者只保留两集合的共性元素。
6,集合变数组。
toArray();
1.6,迭代器
1,什么是迭代器呢?
其实就是集合的取出元素的方式。
2,迭代的常见操作
hasNext();//判断是否有下一个元素
next();//取出下一个元素
remove();//移除
2.1,List集合
List:元素是有序的,元素可以重复。因为该集合体系有索引。
—— |–ArrayList:底层的数据结构使用的是数组结构。特点:查询速度很快。但是增删稍慢。线程不同步。
—— |–LinkedList:底层使用的是链表数据结构。特点:增删速度很快,查询稍慢。
—— |–Vector:底层是数组数据结构。线程同步。被ArrayList替代了。
2.1,List的特有方法
凡是可以操作角标的方法都是该体系特有的方法。
1、增
booleanadd(index,element);//指定位置添加元素
BooleanaddAll(index,Collection);//在指定位置增加给定集合中的所有元素
2、删
Booleanremove(index);//删除指定位置的元素
3、改
set(index,element);//修改指定位置的元素。
4、查
get(index);//通过角标获取元素
subList(from,to);//获取部分对象元素
5、其他
listIterator();//List特有的迭代器
indexOf(obj);//获取元素第一次出现的位置,如果没有则返回-1
注:List集合判断元素是否相同,移除等操作,依据的是元素的equals方法。
示例:
class ListDemo { public static void sop(Object obj) { System.out.println(obj); } public static void method() { ArrayList al = new ArrayList(); //添加元素 al.add("java01"); al.add("java02"); al.add("java03"); sop("原集合是:"+al); //在指定位置添加元素。 al.add(1,"java09"); //删除指定位置的元素。 //al.remove(2); //修改元素。 //al.set(2,"java007"); //通过角标获取元素。 sop("get(1):"+al.get(1)); sop(al); //获取所有元素。 for(int x=0; x<al.size(); x++) { System.out.println("al("+x+")="+al.get(x)); } Iterator it = al.iterator(); while(it.hasNext()) { sop("next:"+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"); 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); */ }}这里写代码片
2.2,ListIterator
1,ListIterator是List集合特有的迭代器,是Iterator的子接口。
2、ListIterator特有的方法
add(obj);//增加
set(obj);//修改为obj
hasPrevious();//判断前面有没有元素
previous();//取前一个元素
2.3,枚举(Enumeration)
1,枚举就是Vector特有的取出方式,其实枚举和迭代是一样的。
因为枚举的名称以及方法的名称都过长,所以被迭代器取代了。
2,特有方法:
addElement(obj);//添加元素,相当于add(obj);
Enumerationelements();//Vector特有取出方式(枚举)
hasMoreElements();//相当于Iterator的hasNext()方法
nextElements();//相当于Iterator的next()方法
2.4,LinkedList
LinkedList:底层使用的是链表数据结构。特点:增删速度很快,查询稍慢。
特有方法:
1、增
addFirst();
addLast();
2、获取
//获取元素,但不删除元素。如果集合中没有元素,会出现NoSuchElementException
getFirst();
3、删
//获取元素,并删除元素。如果集合中没有元素,会出现NoSuchElementException
removeFirst();
removeLast();
在JDK1.6以后,出现了替代方法。
1、增
offFirst();
offLast();
2、获取
//获取元素,但是不删除。如果集合中没有元素,会返回null。
peekFirst();
peekLast();
3、删
//获取元素,并删除元素。如果集合中没有元素,会返回null。
pollFirst();
pollLast();
示例:
/*使用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()); } }}
3.1,Set
|–Set:元素是无序(存入和取出的顺序不一定一致),元素不可以重复。、
——|—HashSet:底层数据结构是哈希表。是线程不安全的。不同步。
注意,对于判断元素是否存在,以及删除等操作,依赖的方法是元素的hashcode和equals方法。
——|—TreeSet:
Set集合的功能和Collection是一致的。
3.1,HasSet
HashSet:线程不安全,存取速度快。
HashSet是如何保证元素唯一性的呢?
是通过元素的两个方法,hashCode和equals来完成。
如果元素的HashCode值相同,才会判断equals是否为true。
如果元素的hashcode值不同,不会调用equals。
示例:
import java.util.*;/*往hashSet集合中存入自定对象姓名和年龄相同为同一个人,重复元素。*/class HashSetTest { public static void sop(Object obj) { System.out.println(obj); } public static void main(String[] args) { HashSet hs = new HashSet(); hs.add(new Person("a1",11)); hs.add(new Person("a2",12)); hs.add(new Person("a3",13));// hs.add(new Person("a2",12));// hs.add(new Person("a4",14)); //sop("a1:"+hs.contains(new Person("a2",12)));// hs.remove(new Person("a4",13)); Iterator it = hs.iterator(); while(it.hasNext()) { Person p = (Person)it.next(); sop(p.getName()+"::"+p.getAge()); } }}class Person{ private String name; private int age; Person(String name,int age) { this.name = name; this.age = age; } public int hashCode() { System.out.println(this.name+"....hashCode"); return name.hashCode()+age*37; } public boolean equals(Object obj) { if(!(obj instanceof Person)) return false; Person p = (Person)obj; System.out.println(this.name+"...equals.."+p.name); return this.name.equals(p.name) && this.age == p.age; } public String getName() { return name; } public int getAge() { return age; }}/**/
——- android培训、java培训、期待与您交流! ———-
- 黑马程序员——集合(上)
- 黑马程序员——集合(上)
- 黑马程序员—集合(上)-Collection
- 黑马程序员———集合(上)
- 黑马程序员——关于集合(上)
- 黑马程序员——JAVASE-集合(上)
- 黑马程序员——Java基础---集合类(上)
- 黑马程序员——Java基础---集合类(上)
- 黑马程序员——java基础---集合(上)
- 黑马程序员——集合知识概括(上)
- 黑马程序员——Java之集合(上)
- 黑马程序员《集合(上)》
- 黑马程序员-集合 (上)
- 黑马程序员--集合(上)
- 黑马程序员—集合
- 黑马程序员—集合
- 黑马程序员—集合
- 黑马程序员—集合
- block(闭包)
- 拓扑
- hdu 5385 The path 贪心?构造
- 小白书之根据二叉树的先序遍历和中序遍历得出后序遍历
- 单例(Singleton)模式
- 黑马程序员——集合(上)
- IOS开发类似于微博个人中心的头像可以拖动lei
- textfield的属性
- VB使用ADODB操作数据库
- IOS开发笔记-01按钮操作-01入学须知
- android Parcelable 带有数组的对象如何序列化 String[] Long[] int[] Object[]
- [NOIP2010]关押罪犯(二分+二分图染色)
- android模拟器重启防止恢复重置,永久删除系统应用apk
- nyoj 6 喷水装置(一)