黑马程序员----java基础第14天(集合Collection,List,Set)
来源:互联网 发布:怎么打开服务器端口 编辑:程序博客网 时间:2024/05/03 09:40
------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------
11.1 Collection基本操作
/*
Collection定义了集合框架的共性功能。
1,添加
add(e);
addAll(collection);
2,删除
remove(e);
removeAll(collection);
clear();
3,判断。
contains(e);
isEmpty();
4,获取
iterator();
size();
5,获取交集。
retainAll();
6,集合变数组。
toArray();
1,add方法的参数类型是Object。以便于接收任意类型对象。
2,集合中存储的都是对象的引用(地址)
什么是迭代器呢?
其实就是集合的取出元素的方式。
如同抓娃娃游戏机中的夹子。
迭代器是取出方式,会直接访问集合中的元素。
所以将迭代器通过内部类的形式来进行描述。
通过容器的iterator()方法获取该内部类的对象。
*/
11.2 List集合
List集合判断元素是否相同,依据是元素的equals方法。
public boolean equals(Object obj)
{
if(!(objinstanceof Person))
returnfalse;
Personp = (Person)obj;
//System.out.println(this.name+"....."+p.name);
returnthis.name.equals(p.name) && this.age == p.age;
}
/*
Collection
|--List:元素是有序的,元素可以重复。因为该集合体系有索引。
|--ArrayList:底层的数据结构使用的是数组结构。特点:查询速度很快。但是增删稍慢。线程不同步。
|--LinkedList:底层使用的链表数据结构。特点:增删速度很快,查询稍慢。线程不同步。
|--Vector:底层是数组数据结构。线程同步。被ArrayList替代了。因为效率低。
|--Set:元素是无序,元素不可以重复。、
List:
特有方法。凡是可以操作角标的方法都是该体系特有的方法。
增
add(index,element);
addAll(index,Collection);
删
remove(index);
改
set(index,element);
查
get(index):
subList(from,to);
listIterator();
intindexOf(obj):获取指定元素的位置。
ListIteratorlistIterator();
List集合特有的迭代器。ListIterator是Iterator的子接口。
在迭代时,不可以通过集合对象的方法操作集合中的元素。
因为会发生ConcurrentModificationException异常。
所以,在迭代器时,只能用迭代器的放过操作元素,可是Iterator方法是有限的,
只能对元素进行判断,取出,删除的操作,
如果想要其他的操作如添加,修改等,就需要使用其子接口,ListIterator。
该接口只能通过List集合的listIterator方法获取。
*/
11.3 LinkedList集合
/*
LinkedList:特有方法:
addFirst();
addLast();
getFirst();
getLast();
获取元素,但不删除元素。如果集合中没有元素,会出现NoSuchElementException
removeFirst();
removeLast();
获取元素,但是元素被删除。如果集合中没有元素,会出现NoSuchElementException
在JDK1.6出现了替代方法。
offerFirst();
offerLast();
peekFirst();
peekLast();
获取元素,但不删除元素。如果集合中没有元素,会返回null。
pollFirst();
pollLast();
获取元素,但是元素被删除。如果集合中没有元素,会返回null。
*/
11.4LinkedList模拟栈,队列
/*
使用LinkedList模拟一个堆栈或者队列数据结构。
堆栈:先进后出 如同一个杯子。
队列:先进先出 First in First out FIFO 如同一个水管。
*/
import java.util.*;
class DuiLie
{
privateLinkedList link;
DuiLie()
{
link= new LinkedList();
}
publicvoid myAdd(Object obj)
{
link.addFirst(obj);
}
publicObject myGet()
{
returnlink.removeFirst();
}
publicboolean isNull()
{
returnlink.isEmpty();
}
}
class LinkedListTest
{
publicstatic void main(String[] args)
{
DuiLiedl = new DuiLie();
dl.myAdd("java01");
dl.myAdd("java02");
dl.myAdd("java03");
dl.myAdd("java04");
while(!dl.isNull())
{
System.out.println(dl.myGet());
}
}
}
11.5 HashSet集合
/*
|--Set:元素是无序(存入和取出的顺序不一定一致),元素不可以重复。、
|--HashSet:底层数据结构是哈希表。是线程不安全的。不同步。
HashSet是如何保证元素唯一性的呢?
是通过元素的两个方法,hashCode和equals来完成。
如果元素的HashCode值相同,才会判断equals是否为true。
如果元素的hashcode值不同,不会调用equals。
注意,对于判断元素是否存在,以及删除等操作,依赖的方法是元素的hashcode和equals方法。
|--TreeSet:
Set集合的功能和Collection是一致的。
//set判断集合元素重复是根据hashcode和equals方法。
public int hashCode()
{
System.out.println(this.name+"....hashCode");
returnname.hashCode()+age*37;
}
publicboolean equals(Object obj)
{
if(!(objinstanceof Person))
returnfalse;
Personp = (Person)obj;
System.out.println(this.name+"...equals.."+p.name);
returnthis.name.equals(p.name) && this.age == p.age;
}
11.6 TreeSet集合
/*
Set:无序,不可以重复元素。
|--HashSet:数据结构是哈希表。线程是非同步的。
保证元素唯一性的原理:判断元素的hashCode值是否相同。
如果相同,还会继续判断元素的equals方法,是否为true。
|--TreeSet:可以对Set集合中的元素进行排序。
底层数据结构是二叉树。
保证元素唯一性的依据:
compareTo方法return 0.
TreeSet排序的第一种方式:让元素自身具备比较性。
元素需要实现Comparable接口,覆盖compareTo方法。
也种方式也成为元素的自然顺序,或者叫做默认顺序。
TreeSet的第二种排序方式。
当元素自身不具备比较性时,或者具备的比较性不是所需要的。
这时就需要让集合自身具备比较性。
在集合初始化时,就有了比较方式。
需求:
往TreeSet集合中存储自定义对象学生。
想按照学生的年龄进行排序。
记住,排序时,当主要条件相同时,一定判断一下次要条件。
*/
/*
当元素自身不具备比较性,或者具备的比较性不是所需要的。
这时需要让容器自身具备比较性。
定义了比较器,将比较器对象作为参数传递给TreeSet集合的构造函数。
当两种排序都存在时,以比较器为主。
定义一个类,实现Comparator接口,覆盖compare方法。
*/
public int compareTo(Object obj)
{
//return0;
if(!(objinstanceof Student))
thrownew RuntimeException("不是学生对象");
Students = (Student)obj;
//System.out.println(this.name+"....compareto....."+s.name);
if(this.age>s.age)
return1;
if(this.age==s.age)
{
returnthis.name.compareTo(s.name);
}
return-1;
/**/
}
class MyCompare implements Comparator
{
publicint compare(Object o1,Object o2)
{
Students1 = (Student)o1;
Students2 = (Student)o2;
intnum = s1.getName().compareTo(s2.getName());
if(num==0)
{
returnnew Integer(s1.getAge()).compareTo(new Integer(s2.getAge()));
/*
if(s1.getAge()>s2.getAge())
return1;
if(s1.getAge()==s2.getAge())
return0;
return-1;
*/
}
returnnum;
}
}
- 黑马程序员----java基础第14天(集合Collection,List,Set)
- 黑马程序员_毕向东JAVA基础_集合(2)Collection&&List&&Set&&泛型
- 黑马程序员_java基础_集合(Collection和List、Set)
- 黑马程序员_集合概述(Collection List&Set)
- 黑马程序员——Java基础---集合(概述、List及子类、Set及HashSet)--第14天--第166-179集
- 黑马程序员-Java基础:集合(Collection)
- 黑马程序员-java基础之集合List,Set集合
- 黑马程序员——Java基础—集合(Set、List)
- 黑马程序员—java基础_集合List和Set
- 黑马程序员------毕老师视频笔记第13-17天------集合Collection-Set-(HashSet、TreeSet)
- 黑马程序员——Java基础---集合(Collection和List)
- 黑马程序员-----Java基础-----Collection-Set
- 黑马程序员_java集合(1) Collection & List & Set & Map
- 黑马程序员------毕老师视频笔记第13-17天------集合Collection-List-(ArrayList、LinkedList)
- 黑马程序员---java基础之集合Collection
- 黑马程序员-----Java基础-----Collection-list
- 黑马程序员——高新技术---Java基础-集合框架-集合Collection,List
- 黑马程序员——java基础拾遗之集合框架(一) List 和 Set
- windows下安装redis
- 3.c/c++程序员面试宝典-变量
- 视频播放器制作(OpenCV+MFC)
- 代码整洁之道读书笔记--对象和数据结构
- 存储管理【分段和分页】
- 黑马程序员----java基础第14天(集合Collection,List,Set)
- (4.1)uboot详解——内部中断
- Flux 傻瓜教程
- spring cron 表达式
- 链队列的算法操作
- iOS高级之第三方管理工具 CocoaPods
- Bridging Signals
- 全面解析Linux 内核 3.10.x - 编译前的准备
- vc++从txt文件中读取数据