黑马程序员-学习日记9(集合框架 2 )
来源:互联网 发布:80端口号被占用 编辑:程序博客网 时间:2024/04/30 06:42
-------android培训、java培训、期待与您交流! ----------
/*
枚举就是Vector特有的取出方式。
另外它还有迭代器、遍历get方法,按角标索引
发现枚举和迭代器很像。
其实枚举和迭代是一样的,为什么要有迭代呢?因为枚举的名
称以及方法的名称都过长,枚举郁郁而终了。IO中有一个对象用到了。
Vector支持枚举,iterator没有。
import java.util.*;
class VectorDemo{
public static void main(String args[]){
Vector vec = new Vector();
vec.add("java01");
vec.add("java02");
vec.add("java03");
vec.add("java04");
Enumeration en = vec.elements();
while(en.hasMoreElements()){
System.out.println(en.nextElement());
}
}
}
LinkedList:特有方法
addFirst();
addLast();
getFirst();返回此列表的第一个元素。
getLast();如果集合中没有元素,会出现NoSushElementsException
获取元素,但不删除元素。
removeFirst();//如果集合中没有元素,会出现NoSushElementsException
removeLast();移除并返回此列表的第一个元素。 获取元素,但元素被删除了。
JDK1.6版本!!!
offerFirst();//add换了
offerLast();
pollFirst 获取并移除此列表的第一个元素,如果此列表为空,则返回null;
pollLast():
peekFirst();
peekLast();获取元素,但不删除元素,如果集合中没有元素,会返回NUll;
import java.util.*;
class VectorDemo{
public static void main(String args[]){
LinkedList link = new LinkedList();
link.addFirst("java01");
link.addFirst("java02");
link.addFirst("java03");
sop(link);
} link.addFirst("java04");
public static void sop(Object obj){
System.out.println(obj);
}
}
import java.util.*;
class VectorDemo{
public static void main(String args[]){
LinkedList link = new LinkedList();
link.addLast("java01");
link.addLast("java02");
link.addLast("java03");
link.addLast("java04");
//sop(link);
sop(link.getFirst());
sop(link.getLast());
sop(link.size());
}
public static void sop(Object obj){
System.out.println(obj);
}
}
import java.util.*;
class VectorDemo{
public static void main(String args[]){
LinkedList link = new LinkedList();
link.addLast("java01");
link.addLast("java02");
link.addLast("java03");
link.addLast("java04");
while(!link.isEmpty()){
sop(link.removeFirst());
}
sop("=========");
while(!link.isEmpty()){
sop(link.removeLast());
}
}
public static void sop(Object obj){
System.out.println(obj);
}
}
//链表也是不同步的!!!!!!!!!!
import java.util.*;
class VectorDemo{
public static void main(String args[]){
LinkedList link = new LinkedList();
link.addLast("java01");
link.addLast("java02");
link.addLast("java03");
link.addLast("java04");
while(!link.isEmpty()){
sop(link.removeLast());
}
}
public static void sop(Object obj){
System.out.println(obj);
}
}
//////////////////////////////////////////////////////////////////////////////
使用LinkedList模拟一个堆栈或者队列数据结构。
堆栈:先进后出
队列:先进先出
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.removeLast();
}
public boolean isNull(){
return link.isEmpty();
}
}
class VectorDemo{
public static void main(String args[]){
DuiLie d1 = new DuiLie();
d1.myAdd("java01");
d1.myAdd("java02");
d1.myAdd("java03");
d1.myAdd("java04");
while(!d1.isNull()){
System.out.println(d1.myGet());
}
}
public static void sop(Object obj){
System.out.println(obj);
}
}
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.removeLast();
}
public boolean isNull(){
return link.isEmpty();
}
}
class VectorDemo{
public static void main(String args[]){
DuiLie d1 = new DuiLie();
d1.myAdd("java01");
d1.myAdd("java02");
d1.myAdd("java03");
d1.myAdd("java04");
//while(!d1.isNull()){
System.out.println(d1.myGet());
//}
}
public static void sop(Object obj){
System.out.println(obj);
}
}
//去掉ArrayList中的重复元素。
import java.util.*;
class VectorDemo{
public static void main(String ars[]){
ArrayList a1 = new ArrayList();
a1.add("java01");
a1.add("java02");
a1.add("java01");
a1.add("java03");
a1.add("java01");
a1.add("java04");
sop(a1);
a1 = singleElement(a1);
sop(a1);
}
public static void sop(Object obj){
System.out.println(obj);
}
public static ArrayList singleElement(ArrayList a1){
ArrayList newA1 = new ArrayList();
sop(newA1.isEmpty());//这个集合为空。
Iterator it = a1.iterator();
while(it.hasNext()){
Object obj = it.next();
if(!newA1.contains(obj))
newA1.add(obj);
}
return newA1;
}
}
import java.util.*;
class VectorDemo{
public static void main(String ars[]){
ArrayList a1 = new ArrayList();
a1.add("java01");
a1.add("java02");
a1.add("java01");
a1.add("java03");
a1.add("java01");
//a1.add("java04");//NoSuchElementException此句
Iterator it = a1.iterator();
//在迭代时循环next调用一次,就要hasNext判断一次。
//否则有可能报异常。
while(it.hasNext()){
sop(it.next()+"..."+it.next());//因为取了两个次,判一次。
}
}
public static void sop(Object obj){
System.out.println(obj);
}
public static ArrayList singleElement(ArrayList a1){
ArrayList newA1 = new ArrayList();
sop(newA1.isEmpty());//这个集合为空。
Iterator it = a1.iterator();
while(it.hasNext()){
Object obj = it.next();
if(!newA1.contains(obj))
newA1.add(obj);
}
return newA1;
}
}
////////////////////////
将自定义对象作为元素存到ArrayList集合中,并去除重复元素。
比如:存入对象,同姓同年龄,视为同一个人,为重复元素。
List 集合判断元素是否相同,依据的是元素的equals方法。
public boolean contains(Object o)如果此列表中包含指定的元素
则返回 true。更确切地讲,当且仅当此列表包含至少一个满足
(o==null ? e==null : o.equals(e)) 的元素 e 时,则返回 true。
public boolean remove(Object o)移除此列表中首次出现的指定
元素(如果存在)。如果列表不包含此元素,则列表不做改动。
更确切地讲,移除满足
(o==null ? get(i)==null : o.equals(get(i))) 的最低索引的
元素(如果存在此类元素)。如果列表中包含指定的元素,则返回
true(或者等同于这种情况:如果列表由于调用而发生更改,则返
回 true)。
///////////////////////////
import java.util.*;
class Person{
private String name;
private int age;
Person(String name,int age){
this.name = name;
this.age = age;
}
public String getName(){
return name;
}
public int getAge(){
return age;
}
}
class VectorDemo{
public static void main(String ars[]){
ArrayList a1 = new ArrayList();
//a1.add(Object obj);Object obj = new Person("lisi01",33);默认为它。
a1.add(new Person("lisi01",30));
a1.add(new Person("lisi02",32));
a1.add(new Person("lisi03",33));
a1.add(new Person("lisi04",35));
Iterator i = a1.iterator();
while(i.hasNext()){
Person p =(Object)i.next();
//多态编译失败。因为返回的Object,里面没有这方法
//sop(i.next().getName()+".."+i.next().getAge());
sop(p.getName()+"..."+p.getAge());
}
}
public static void sop(Object obj){
System.out.println(obj);
}
public static ArrayList singleElement(ArrayList a1){
ArrayList newA1 = new ArrayList();
Iterator it = a1.iterator();
while(it.hasNext()){
Object obj = it.next();
if(!newA1.contains(obj))
newA1.add(obj);
}
return newA1;
}
}
//在ArrayList中判断元素是否相同用的是equals方法。
//Object中判断的是对象地址值是否相同!!!!!
import java.util.*;
class Person{
private String name;
private int age;
Person(String name,int age){
this.name = name;
this.age = age;
}
public String getName(){
return name;
}
public int getAge(){
return age;
}
public boolean equals(Object obj){
if(!(obj instanceof Person)){
return false;
}
Person p = (Person)obj;
System.out.println(this.name+"..."+p.name);
return this.name.equals(p.name)&&this.age==p.age;
}
}
class VectorDemo{
public static void main(String ars[]){
ArrayList a1 = new ArrayList();
a1.add(new Person("lisi01",30));//a1.add(Object obj);Object obj = new Person("lisi01",33);默认为它。
//a1.add(new Person("lisi02",32));
a1.add(new Person("lisi02",32));
a1.add(new Person("lisi03",33));
//a1.add(new Person("lisi04",35));
//a1.add(new Person("lisi04",35));
//a1.remove(new Person("lisi04",35));//删除上一个元素,当没有覆写父类中的equals的方法时。
a1 = singleElement(a1);
Iterator i = a1.iterator();
while(i.hasNext()){
Object obj = i.next();
Person p = (Person)obj;
//Person p = (Person)i.next();
sop(p.getName()+".."+p.getAge());
}
}
public static void sop(Object obj){
System.out.println(obj);
}
public static ArrayList singleElement(ArrayList a1){
ArrayList newA1 = new ArrayList();
Iterator it = a1.iterator();
while(it.hasNext()){
Object obj = it.next();
if(!newA1.contains(obj))
newA1.add(obj);
}
return newA1;
}
}
/////////////////////////////////////////////////////////////////////////////////////
Collection :集合是可变长度的!!!
|--List:元素是有序的,元素可以重复,因为该集合体系有索引。
|--ArrayList:底层的数据结构使用的是数组结构。特点:查询速度很快,但增删稍慢,是线程不同步的效率高,默认数据长度为10,当超过长度为10的元素后,再往里增加的话,它会买new一个新的数组长度为原来的50%延长把原来数组的元素copy到新数组中来再把新元素增加到后面去。判断元素是否存在及删除元素,只依赖equals。原因在于数据结构不同,方法不同。而HashSet先依赖HashCode后依赖equals.
|--LinkedList:底层使用的链表数据结构,特点:增删速度很快,查询稍慢。
|--Vector:底层是数组数据结构。和ArrayList功能一模一样,是线程同步的,判锁,无论增删查都慢,被ArrayList替代了。
|--Set:元素是无序的(存入和取出不一至),元素可以重复
Set集合的功能和Collection是一致的。
|--HashSet:底层数据结构是哈希表。哈希表是按照哈希值来存的,所以存入和取出时不一致。(因为每个字符串都有一个地址值,是按地址值存入的,,是线程非同步的。
//HashSet是如何保证元素唯一性呢?是通过元素的两个方法,hashCode和equals来完成的,如果元素的HashCode值相同,才会判断equals是否为true
//如果元素的hashCode值不同,不会调用equals方法。 所以当我们在自定义对象时,通常要覆写HashCode和equals方法。这两个方法是系统底层自己调用的。
//对于判断元素是否存在,及删除等操作,依赖的方法是元素的hashcode和equals方法。
//(先看哈希值)在哈希表中当哈希值重复的时候,它还有一次校验方式,(判断两个元素是否相同。)如果不同会要该哈希值下顺沿。
|--TreeSet:可以对Set集合中的元素进行排序。按ASCII码排序。
List:
特有方法,凡是可以操作角标的方法都是该体系特有方法。
为什么Add(),方法返回的是布尔型?当存入一个数据后,
因地址和内容一样是同一个元素,所以返回false.所以
添加失败为假。
false.
//往hashSet集合中存入自定义对象。姓名年龄相同为同人,重复元素。
import java.util.*;
class VectorDemo{
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("a4",14));
hs.add(new Person("a2",12));
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;
}
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;
}
}
往TreeSet集合中存储自定义对象学生。
想按学生的年龄进行排序。
TreeSet的要求是:往里面存的元素必须具备比较性。(实现Comparable接口)
记住:排序时,当主要条件相同时,一定要判断一下次要条件。
import java.util.*;
class VectorDemo{
public static void main(String args[]){
TreeSet ts = new TreeSet();
ts.add(new Student("lisi02",22));
ts.add(new Student("lisi007",20));
ts.add(new Student("lisi09",19));
ts.add(new Student("lisi08",19));
//ts.add(new Student("lisi01",40));
Iterator i = ts.iterator();
while(i.hasNext()){
//System.out.println(i.next());
Student stu = (Student)i.next();
System.out.println(stu.getName()+"..."+stu.getAge());
}
}
}
class Student implements Comparable{//该接口强制让学生具备比较性。
private String name;
private int age;
Student(String name,int age){
this.name = name;
this.age = age;
}
public int compareTo(Object obj){//不能声明异常。
if(!(obj instanceof Student))
throw new RuntimeException("不是学生对象");
Student s = (Student)obj;
System.out.println(this.name+"..compareto.."+s.name);
if(this.age>s.age)
return 1;
if(this.age==s.age){
return this.name.compareTo(s.name);
}
return -1;
}
public String getName(){
return name;
}
public int getAge(){
return age;
}
}*/
- 黑马程序员-学习日记9(集合框架 2 )
- 黑马程序员-学习日记9(集合框架 1 )
- 黑马程序员-学习日记9(集合框架 3 ) .
- 黑马程序员-学习日记9(集合框架 4 )
- 黑马程序员--学习日记--集合框架
- 黑马程序员_Java学习日记10_集合框架2
- 黑马程序员-----java 集合框架(学习日记)
- 黑马程序员---(学习日记——集合框架)集合框架
- 黑马程序员--学习日记 (四)集合
- 黑马程序员_JAVA学习日记_JAVA中API:集合框架2(Map集合及其子集合)
- 黑马程序员--Java学习日记8_集合框架
- 黑马程序员_Java学习日记8_集合框架1
- 黑马程序员java学习日记——集合框架
- 黑马程序员——学习日记14 java集合框架
- 黑马程序员--【学习日记六】——集合框架(一)
- 黑马程序员--【学习日记七】——集合框架(二)
- 黑马程序员 自学日记(七)集合框架
- 黑马程序员Java学习日记(4)集合(一)
- MATLAB基本函数
- [Accessibility] Missing contentDescription attribute on image 解决
- LI 标签中让文章标题左对齐,日期右对齐的方法
- Android 安装位置 – installLocation简析
- 关于lucene的demo运行时出现Exception in thread "main" java.lang.NoClassDefFoundError错误
- 黑马程序员-学习日记9(集合框架 2 )
- Eclipse 快捷键
- gerrit 在win7下安装总结
- xml学习笔记
- tree结构
- 数据在XML / YAML文件的保存/载入
- vim插件配置及安装
- ipad4常用操作
- Android抓包