本对象>obj时,返回正数
2.2.2.删除节点
remove(Objectobj)
clear()//删除所有元素
2.2.3.检查是否包含某元素
booleancontains(Objectobj)返回true,表示本对象包含obj,
2.2.4.返回根节点对象(最小的对象)
Objectfirst()
2.2.5.返回最后一个节点对象(最大的对象)
Objectlast()
2.2.6.检查集合是否为空
booleanisEmpty()返回true表示没有任何节点。
2.2.7.返回节点总数
intsize()
//实例化TreeSet对象,并使用匿名类方法.
TreeSetmyTree=newTreeSet(newComparator()
{
publicintcompare(Objecta,Objectb){
Studentstu1=(Student)a;
Studentstu2=(Student)b;
ReturnpareTo(stu2);
}
}
);//到此,对象声明结束。
Studentst1=newStudent(87,”扬花”);
MyTree.add(st1);
st1=newStudent(97,”扬花1”);
MyTree.add(st1);
st1=newStudent(32,”塘养”);
MyTree.add(st1);
//开始输出数据
Iteratorie=MyTree.iterator();//获得迭代器
While(ie.hasNext()){
Studentst3=(Student)ie.next();
System.out.println(st3.name+””+str3.mathScore);
}
说明:
1.把一个元素插入TreeSet对象的合适位置要比插入数组或链表的合适位置效
率高,
2.输出元素可以使用Iterator对象的方法。
3.如何检查一个10位的字符串是否由互不相同的字符组成。
4.如果要检查一个5位的整数是否由互不相同的数字组成,又该如何处理?
请用
两种不同的方法实现它。
(二)。
实现了List接口的类
1.Vector类
该类具有同步功能,是线程安全的,但速度慢一些,在需要同步的场合使用。
如果侧重于速度,则可以使用其它ArrayList类
1.1.构造函数
Vector()
Vector(intcapacity)
Vector(intcapacity,intincrement)
Vector(Collectionc)
1.2.方法:
1.2.1.添加/插入元素
add(Objectobj)增加一个对象
add(intindex,Objectobj)在index位置插入一个对象
addElement(Objectobj)增加一个对象
1.2.2.获得元素
ObjectfirstElement()返回第一个元素
ObjectlastElement()返回最后一个元素
Objectget(intindex)返回索引为index的元素
elementAt(intindex)返回索引为index的元素
1.2.3.获得元素个数
intsize()返回当前元素总数
1.2.4.删除元素
removeElementAt(intindex)删除索引为index的元素
remove(Objectobj)删除元素Obj
clear()删除所有元素。
1.2.5.获得枚举/迭代器
Enumerationelements()返回对象的枚举器
Iteratoriterator()返回迭代器对象
1.2.6.转换为其它对象
Object[]toArray();//返回Object数组
toArray(Object[]obj)将对象拷贝到数组obj中.此处obj必须分配存储空间
1.2.7.返回本对象的一个拷贝
Vectorclone();//返回本对象的一个拷贝
1.2.8.获得子序列
ListsubList(intfromIndex,inttoIndex)返回范围fromIndex--toIndex中的元素。
1.2.9.检查是否存在元素
IntindexOf(Objectobj)搜索对象obj,并返回obj在集合中的索引,如果没有找
到,则返回-1;
IntindexOf(Objectobj,intindex)从index位置开始搜索对象obj,并返回obj在
集合中的索引,如果没有找到,则返回-1;
booleancontains(Objectobj)返回true当包含对象obj时
练习:
写一个方法,输入一个整数,返回它的所有因子。
2.ArrayList类
该类没有同步功能,是线程非安全的,但速度快,适合于很少对元素进行删除的场合。
如果需要同步,则可以使用Vector类或采取其它同步措施.ArrayList在内存中是顺序连续存放的,适用于元素的随机存取。
如果有同步要求,可以有两种方法:
一是在操作集合对象的方法上使用synchronized关键字,另外一个就是,定义同步化的集合对象(采用Collections工具类的方法),例如:
ListmyList=Collections.synchronizedList(newArrayList());
2.1.构造函数
ArrayList()
ArrayList(Collectionc)
ArrayList(intcapacity)
ArrayList() //泛型表示法。
ArrayList(Collectionc)
ArrayList(intcapacity)
2.2.方法:
2.2.1.添加/插入对象
add(int index,Object element) 在索引index插入元素element
add(Object o) 在末尾处添加一个元素
addAll(Collection c) 在末尾处添加一个集合对象
addAll(int index,Collection c) 在索引index插入集合对象
2.2.2.获得对象
Objectget(int index) 返回索引index处的元素
2.2.3.检查是否存在元素
booleancontains(Object elem) 返回true表示包含元素elem
intindexOf(Object elem)正向查找元素elem,如果存在,则返回该元素在
集合中的索引否则,返回-1
intlastIndexOf(Object elem) 逆向查找元素elem,如果存在,则返回该元素在
集合中的索引否则,返回-1
2.2.4.转换为其它类型
Object[]toArray() 返回一个数组
2.2.5.检查是否为空(不包含任何对象)
booleanisEmpty() true表示对象为空
2.2.6.删除对象成员
remove(Objectobj)删除元素Obj
remove(intindex)删除索引为index的元素
clear()删除所有元素。
2.2.7.拷贝对象
ArrayListclone()
2.2.7.获得迭代器
Iteratoriterator()//获得迭代器
2.2.8.修改元素
set(intindex,Objectobj)修改位置index处的元素
2.2.9.获得元素个数
intsize()
2.2.10.获得子序列
ListsubList(intfromIndex,inttoIndex)返回范围fromIndex--toIndex中的元素。
2.2.11.确保容量
voidensureCapacity(intminCapacity)
2.2.12..缩小集合的容量到size大小
voidtrimToSize()
3。
LinkedList类(链表)
链表是一种常见的数据结构,采用链式存储,比数组更加灵活,但需要付出较多的存储空间。
链表是由若干个称为节点的对象组成的一种数据结构,每个节点含有一个数据域和一个指向下一个节点的指针。
链表类(LinkedList)封装在java.util包中。
适合于对元素频繁进行删除、插入等操作的场合。
3.1.构造函数
LinkedList()
LinkedList()
3.2.方法:
3.2.1.添加节点
booleanadd(Objectelement)//添加(节点)元素到链表中
booleanadd(intindex,Objectelement)//在链表index位置处添加(节点)元素.
booleanaddFirst(Objectelement)//添加(节点)元素到链表头部位置
booleanaddLast(Objectelement)//添加(节点)元素到链表尾部位置
3.2.2.删除节点
voidclear()删除所有节点
Objectremove(intindex)//删除位置index处的元素
booleanremove(Objectelement)//删除位置index处的元素
ObjectremoveFirst()//删除第一个元素
ObjectremoveLast()//删除最后一个元素
3.2.3.获得节点
ObjectgetFirst()//返回第一个元素
ObjectgetLast()//返回最后一个元素
Objectget(intindex)//获得位置index处的元素
3.2.4.查找节点
booleancontains(Objectelement)返回true表示包含元素element
intindexOf(Objectelement)//正向搜索element,并返回该元素在链表中的索引,
如果没有该元素,则返回-1
intlastIndexOf(Objectelement)//逆向搜索element,并返回该元素在链表中的索引,
如果没有该元素,则返回-1
3.2.5.修改节点
Objectset(intindex,Objectelement)//替换位置index的元素
3.2.6.获得节点总数
intsize()返回链表长度
3.2.7.复制链表
Objectclone()//获得本链表的一份拷贝
练习1:
用LinkedList实现Stack操作。
提供下列功能:
push(Objectobj)//元素入栈
Objectpop()//元素出栈
booleanisEmpty()//检查栈是否为空
Object[]toArray()//以数组形式返回栈中所有元素
练习2:
有一副扑克牌,现将牌最上面一张发出,将其下一张放最下面,又将最上面一张发出,将其下一张放最下面,以此类推,直至发完所有牌,问最后一张是什么牌?
(牌的顺序:
大王,小王,黑桃,红桃,梅花,方块,同种色顺序:
A,2,3,……,Q,K。
,依此类推。
试编程求解之。
4.栈(Stack)类
栈是一种实现了“后进先出“的数据结构,只能在一端进行输入或输出操作。
向栈中添加数据称为压栈,从栈中输出数据叫弹栈(出栈)。
压栈和出栈都在栈顶进行,即最后输入的数据在最前面。
栈是很灵活的数据结构,使用栈可以节省内存空间,比如,递归是一种很消耗内存的算法,但借助栈可以消除大部分递归.达到和递归算法相同的目的.
栈是Vector的一个子类,实现了后进先出的数据结构
4.1.构造函数:
Stack()
4.2.方法:
4.2.1.添加元素
Objectpush(Objectobj)//添加数据
4.2.2.获得元素
Objectpop()//弹出数据
Objectpeek()//查看栈顶数据
4.2.3.检查栈是否为空
booleanempty()返回true表示栈空(没有任何元素).
4.2.4.搜索元素
intsearch(Objectelemet)返回element在栈中的位置,栈顶位置为1,向下依次增加.如果栈中不存在元素element则返回-1.
5.ArrayList和LinkedList的特点及其使用场合
5.1.Arr