Vector集合的方法暂时略过吧,因为已经淘汰了,暂时不管他了。
常用对象API(集合框架-LinkedList集合)
package cn.itcast.p2.linkedlist.demo;
import java.util.Iterator;
import java.util.LinkedList;
public class LinkedListDemo {
public static void main(String[] args) {
LinkedList link=new LinkedList();
link.addFirst("abc1");
link.addFirst("abc2");
link.addFirst("abc3");
link.addFirst("abc4");
// System.out.println(link.getFirst());//获取第一个但不删除
// System.out.println(link.getFirst());
// 打印结果abc4
// abc4
System.out.println(link.removeFirst());//获取元素但是会删除。
System.out.println(link.removeFirst());
// abc4
// abc3
while(!link.isEmpty()) {
System.out.println(link.removeFirst());
/*abc4
abc3
abc2
abc1*/
}
// Iterator it=link.iterator();
// while(it.hasNext()) {
// System.out.println(it.next());
// /*打印结果为abc4(ctrl+shift+/是注释多行当快捷键)
// abc3
// abc2
// abc1*/
// }
}
}
练习题略过
常用对象API(集合框架-ArrayList集合存储自定对象)
集合里面装的全部都是引用,不可能装数组的。迭代器用的也是引用。
package cn.itcast.p3.arraylist.test;
import java.util.ArrayList;
import java.util.Iterator;
import cn.itcast.p.bean.Person;
public class ArrayListTest {
public static void main(String[] args) {
ArrayList al =new ArrayList();
al.add(new Person("lisi1",21));
al.add(new Person("lisi2",21));
al.add(new Person("lisi3",21));
al.add(new Person("lisi4",21));
Iterator it=al.iterator();
while(it.hasNext()) {
//System.out.println(it.next().getName());//person 提升为Object类型,所以没有了该方法
// System.out.println(((Person)it.next()).getName());//需要把它强制转回去才可以。
/*lisi1
lisi2
lisi3
lisi4*/
Person p=(Person)it.next();//多年多态学习的时候讲过(小心要强转动作)
System.out.println(p.getName()+"--"+p.getAge());
/*lisi1--21
lisi2--21
lisi3--21
lisi4--21*/
}
al.add(5);//al.add(new Integer(5)); jdk1.5以后现在可以简写了。
//基本数据类型赋予了引用数据类型的时候才装箱。当引用数据类型和基本数据类型做运算的时候就拆箱。
}
}
常用对象API(集合框架-HashSet集合)
Set:元素不可以重复,是无序。
Set接口中的方法和Collection一致。子类中HashSet和TreeSet比较常用。
HashSet:内部数据结构是哈希表,是不同步到。
package cn.itcast.p4hashset.demo;
import java.util.HashSet;
import java.util.Iterator;
public class HashSetDemo {
public static void main(String[] args) {
HashSet hs=new HashSet();
hs.add("hahah");
hs.add("xixi");
hs.add("hehe");
hs.add("heihei");
hs.add("hahah");//重复也没用,进不去
Iterator it=hs.iterator();
while(it.hasNext()) {
System.out.println(it.next());
}
}
}
/*hahah
heihei
xixi
hehe
不保证迭代顺序,所以输出就随机了。
*/
常用对象API(集合框架-哈希表)
根据元素自身的特点来算出它应该存放的位置(由算法来决定)。
经典算法:取模得角标。
哈希表是如何避免角标重复的呢?
若重复(哈希值一致,也就是hashCode一致),则再判断其内容(equals方法)。若哈希值不同的话,不需判断equals方法。提高了查询效率,但是不能重复。
常用对象API(集合框架-HashSet存储自定义对象)
package cn.itcast.p4hashset.demo;
import java.util.HashSet;
import java.util.Iterator;
import cn.itcast.p.bean.Person;
public class HashSetTest {
public static void main(String[] args) {
HashSet hs=new HashSet();//存元素的时候依赖于
/*
* 往hashSet集合中存储Person对象。如果姓名和年纪相同,视为同一个人。视为相同元素。
* 使用的元素的hashCode方法来确定位置,如果位置相同,在通过元素的equals来确定是否相同。
*/
hs.add(new Person("lisi4",24));
hs.add(new Person("lisi7",27));
hs.add(new Person("lisi1",21));
hs.add(new Person("lisi9",29));
hs.add(new Person("lisi7",27));//增加一条,怎么也会打印出来呢???如果想不用window的哈希算法,自己写一个覆盖它的。 经过自己复写之后,现在保证了唯一性,就没有输出5个了,输出4个了。
Iterator it=hs.iterator();
while(it.hasNext())
{
Person p=(Person)it.next();
System.out.println(p.getName()+"..."+p.getAge());
/*输出无序lisi1...21
lisi4...24
lisi7...27
lisi9...29
*/
}
}
}
常用对象API(集合框架-哈希表)
根据元素自身的特点来算出它应该存放的位置(由算法来决定)。
经典算法:取模得角标。
哈希表是如何避免角标重复的呢?
若重复(哈希值一致,也就是hashCode一致),则再判断其内容(equals方法)。若哈希值不同的话,不需判断equals方法。提高了查询效率,但是不能重复。
常用对象API(集合框架-HashSet存储自定义对象)
package cn.itcast.p4hashset.demo;
import java.util.HashSet;
import java.util.Iterator;
import cn.itcast.p.bean.Person;
public class HashSetTest {
public static void main(String[] args) {
HashSet hs=new HashSet();//存元素的时候依赖于
/*
* 往hashSet集合中存储Person对象。如果姓名和年纪相同,视为同一个人。视为相同元素。
* 使用的元素的hashCode方法来确定位置,如果位置相同,在通过元素的equals来确定是否相同。
*/
hs.add(new Person("lisi4",24));
hs.add(new Person("lisi7",27));
hs.add(new Person("lisi1",21));
hs.add(new Person("lisi9",29));
hs.add(new Person("lisi7",27));//增加一条,怎么也会打印出来呢???如果想不用window的哈希算法,自己写一个覆盖它的。 经过自己复写之后,现在保证了唯一性,就没有输出5个了,输出4个了。
Iterator it=hs.iterator();
while(it.hasNext())
{
Person p=(Person)it.next();
System.out.println(p.getName()+"..."+p.getAge());
/*输出无序lisi1...21
lisi4...24
lisi7...27
lisi9...29
*/
}
}
}
常用对象API(集合框架-LinkedHashSet集合)
HashSet hs=new HashSet();
无序可以变为有序
HashSet hs=new LinkedHashSet();//现在就变为有序了。保证唯一和有序。
TreeSet集合
常用对象API(集合框架-TreeSet集合)
可以对指定集合进行自然排序。是不同步的。
判断元素唯一性的方式:就是根据比较方法的返回结果是否是0,是0就是相同元素,不存。
TreeSet对元素进行排序的方式之一:
让元素自身具备比较功能,就需要实现Comparable接口,覆盖compareTo方法。
(代码就略过了。)
二叉树的基础上(可以在有序的数字进行有序的折半可以提高二叉树的查找效率)
如何实现怎么存进去怎么取出来?
人工去修改下比较的返回值即可,因为我们是根据返回值来对其进行判断。返回值无非1,-1,和0.我们只需要把他改成1即可,让二叉树存进去的数都依次向右下角排列,然后自然就会按原来的顺序输出。