集合框架
来源:互联网 发布:练耳软件 mac 编辑:程序博客网 时间:2024/06/08 03:45
集合容器
数组,StringBuffer,StringBuilder
集合特点:
1.集合用来存储对象的容器
2.集合长度是可变的
3.集合不可以存储基本数据类型
集合框架:
集合容器因为内部的数据结构不同,有多种具体容器
顶层:接口Collection
1.添加
booleanadd(Object obj) 增加一个
booleanaddAll(Collection coll)增加一个集合
2.删除
booleanremove(Object obj)删除一个元素,为改变集合的长度
booleanremoveAll(Collection col)删除一个集合,多个元素
voidclear()清空集合
3.判断:
booleancontains(Object ojb)
booleancontainsAll(Collection coll)
booleanisEmpty();判断集合中是否有元素
4.获取
intsize();集合中元素的个数
Iterator iterator()
5.其他
booleanretainAll(Collection coll):取交集
Object[]toArray()转为数组
publicstatic void show(Collection c1,Collection c2){
c1.add("abc1");
c1.add("abc2");
c1.add("abc3");
c1.add("abc4");
c1.add("abc5");
c1.add("abc6");
c1.addAll(c2);将c2中的元素添加到c1中
System.out.println(c1);//[abc1,abc2,abc3,abc4,abc5,abc6]
}
c1.removeAll(c2):从c1中删除c2集合,如果c1中有和c2相同的元素,也要删除
c1.retainAll(c2):c1中存放着c1和c2的交集
Iteratorit = col.iterator();通过集合来获得迭代器的对象
it.hasNext():判断集合是否存在下一个元素
it.next():取出集合的当前指针的下一个元素,指针初始位置是在第一个元素的上一个位置
当用for()是会释放迭代器
for(Iteratorit = col.iterator;it.hasNext();)
{
System.out.println(it.next()):
}
迭代器对象:Iteratorit = col.iteator()。是通过col对象的成员内部类,通过该内部类来创建了一个,内部类对象。并且是用该
内部类对象时,该内部类的接口来定义的。也就是该内部类实现了Iterator接口,然后用该类创建了一个接口类型的对象
该对象就有了,hasNext(),next()方法。
Collectio |
|接口List:有序(存入和取出顺序一致),元素都有索引(角标),元素可以重复
|1.添加
voidadd(index,element);在指定位置插入指定元素
| voidadd(index,collection);在指定位置插入集合
2.删除
Objectremove(index);删除指定下标的元素
3.修改
Objectset(index,element):把指定位置的元素,修改为指定元素
4.获取
Objectget(index)根据下标获取元素
intindexOf(Object)根据对象获取第一次出现的下标
intlastIndexOf(Object)从后面开始根据对象获取第一次出现的下标
List subList(from,to)获取从下标from开始,to结束的集合,包括from不包括to
ListIterator特点
如果Iterator对集合遍历的同时,又对集合修改,则集合会发生异常
如果不想发生异常必须用ListItrrator
Listlist = new ArrayList()
list.add("avc1");
list.add("avc2");
list.add("avc3");
Iteratorit = list.iterator();
while(it.hasNext()){
Objectobj = it.next()
if(obj.equals("avc2"))
list.add("dd");//此处会发生ConcurrentModificationException异常
}
修改措施
使用ListIterator:还可以逆序hasPrevious() previous();
ListIteratorit = list.listIterator();
while(it.hasNext()){
Objectobj = it.next();
if(obj.equals("av"))
it.add("ddd");
}
List
|Vector:内部是数组的数据结构:查找,和修改都比较慢,并且是同步的
|ArrayList:内部也是数组的数据结构,查找比较快,但是增加比较慢,内部是异步的
|LinkedList:内部是链表的数据结构,查找比较慢,但是增加比较快,他也是异步
addFirst() addLast() 增加的两个方法 removeFirst()删除第一个 isEmpty()空为真
removeLast();removeFirst()
getFirst()
getLast()
升级后:peekFirst()//获取但不移除,如果链表为空,不会抛出NoSuchElementException
pollFirst()//获取并移除,如果链表为空,不会抛出NoSuchElementException
堆栈:first inlast out FIFO
队列;FIFO
装箱的条件:基本数据类型赋值给引用数据类型时,自动装箱
接口Set:元素不能重复,无序
Set接口中的方法和Collection一致
|--HashSet:内部数据结构是哈希表
取set集合中只有一种取值方法,只能用迭代器
哈希表确定元素是否相同
1.判断的两个元素的哈希值是否相同。
如果相同,在判断两个对象的内容是否相同
2.判断哈希值相同,其实判断的是对象的hashCode()的方法。判断内容相同,用的是equals
//ArrayList中的contains原理是equals();,如果想两个对象指定内容相同,只要重写equals();方法
如果是HashSet则先判断hasCode(),当值相同时,在判断equals();方法
在ArrayList 删除一个元素,看比较的元素和集合中元素相等的依据是equals()方法。可以自定义该方法
在HashSet 删除一个元素,看比较的元素和集合中元素相等的依据是hashCode和equals()方法。可以自定义该方法
LinkedHashSet 有序,不重复
publicclass Quzhi {
publicstatic void main(String[] args) {
ArrayListlist = new ArrayList();
list.add("abc");
list.add("abc1");
list.add("abc");
list.add("abc1");
list.add("abc");
Iteratorit = list.iterator();
System.out.println("之前的集合");
while(it.hasNext()){
System.out.print(it.next()+"");
}
System.out.println("之后的集合");//也可以用contains判断集合中是否存在元素
//contains原理是equals();
HashSethash = new HashSet();
Iteratorit1 = list.iterator();
while(it1.hasNext()){
hash.add(it1.next());
}
Iteratorhi = hash.iterator();
while(hi.hasNext()){
System.out.print(hi.next()+"");
}
|--TreeSet:
特点:按照指定方式排序,接口Comparable<T>自然比较法,强制使用compareTo()方法
判断元素的唯一性方式:就是根据比较方法的返回结果是否为0,是0,就是相同元素
TreeSet对元素进行排序的方式一:
让元素自身具备比较功能,元素需要实现Comparable接口,覆盖compareTo方法
程序中的this代表本对象,也就是待插入的元素,和集合中的元素比较后,如果是1则放置集合的后面,0放弃,小于0放在前面
classPerson implements Comparable{
privateString name;
privateint age;
publicPerson(String name, int age) {
super();
this.name= name;
this.age= age;
}
publicString getName() {
returnname;
}
publicvoid setName(String name) {
this.name= name;
}
publicint getAge() {
returnage;
}
publicvoid setAge(int age) {
this.age= age;
}
@Override
publicString toString() {
return"Person [name=" + name + ", age=" + age + "]";
}
@Override
publicint compareTo(Object o) {
Personperson = (Person) o;
// if(this.age>person.age){
// return 1;//往下排,升序
// }
// else if(this.age<person.age){
// return -1;
// }
// else{
// returnthis.name.compareTo(person.name);
// }
inttemp = this.age - person.age ;
returntemp==0?this.name.compareTo(person.name):temp;
}
}
publicclass TreeSetDemp {
publicstatic void main(String[] args) {
TreeSet ts = new TreeSet();
ts.add(newPerson("ava1",31));
ts.add(newPerson("ava2",32));
ts.add(newPerson("ava3",33));
ts.add(newPerson("ava7",34));
ts.add(newPerson("ava4",37));
PrintTreeSet(ts);
}
privatestatic void PrintTreeSet(TreeSet ts) {
Iteratorit = ts.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
}
如果不要按照对象中具备的自然排序进行排序
可以使用TreeSet集合第二种排序方式2
内部结构是一个二叉树,
让集合自身具备比较功能;定义一个类实现Comparator接口,覆盖compare方法(1)原序
将该类对象作为参数传递给TreeSet的构造方法,是集合具备排序功能
classComparatorByName implements Comparator{
@Override
publicint compare(Object o1, Object o2) {
Personp1 = (Person)o1;
Personp2 = (Person)o2;
inttemp = p1.getName().compareTo(p2.getName());
returntemp==0?p1.getAge()-p2.getAge():temp;
}
}
TreeSet ts = new TreeSet(new ComparatorByName());
- 集合框架
- 集合框架
- 集合框架
- 集合框架
- 集合框架
- 集合框架
- 集合框架
- 集合框架
- 集合框架
- 集合框架
- 集合框架
- 集合框架
- 集合框架
- 集合框架
- 集合框架
- 集合框架
- 集合框架
- 集合框架
- Martin Fowler厌倦ORM了
- 从HTTP 到 websocket
- Android ADT Templates Android常用模版
- mysql的三种安装方式:RPM 二进制包和源代码
- #include <stddef.h> or #include <cstddef>
- 集合框架
- 2013年上半年软件设计师C++题答案与分析
- Cocos2d-x for linux
- [Web基础开发-JSP基础语法]JSP注释与Scriptlet_01
- font
- 必须遵守的自动化测试框架设计要求
- python 图片截取
- 动态规划算法——矩阵乘法的顺序安排
- python中使用set去除list中的重复元素