javaseday17(Vector 链表模拟队列或者堆栈 ArrayList 拆装箱 哈希)

来源:互联网 发布:淘宝盗图处罚规则2016 编辑:程序博客网 时间:2024/05/17 23:36

Vector

Enumeration(1.0的时候弧线方法的名称也过长)名称过长所以 被iterator 替代也是通过for循环完成枚举  

Vector v = new Vector();


v.addElement("abc1");
v.addElement("abc2");
v.addElement("abc3");
v.addElement("abc4");


Enumeration en = v.elements();
while(en.hasMoreElements()){
System.out.println(en.nextElement());


}


Iterator it = v.iterator();
while(it.hasNext()){
System.out.println(it.next());
}

LinkedList

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.removeFirst());//获取元素但是会改变链表的长度删除第一个
Iterator it = link.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
while(!link.isEmpty()){
System.out.println(link.removeFirst());
}



/*
 * 实在不知道用什么就用ArrayList 最常见 但还是要根据实际情况判断
 * 请使用LinkedList模拟一个堆栈或者队列数据结构
 *
 * 堆栈:
 * 先进后出 First In Last Out   FILO
 * 队列:
 * 先进先出 First In First Out  FIFO  排队买饭
 *
 * 应该描述这样一个容器 给使用者提供一个容器对象完成这两种结构中的一种
 * LinkedList
 * addFirst();
 * addLast();
 *  jdk1.6
 *  offerFirst();
 *  offerLast();
 *
 *  getFirst(); //获取但不移除如果链表为空 抛出NoSuchElementException异常
 *  getLast();
 *  jdk1.6
 *  peekFirst(); //获取但不移除 如果链表为空 返回null
 *  peekLast();
 *
 *  removeFirst();//获取并移除 如果链表为空 抛出NoSuchElementException异常
 *  removeLast();
 *  jdk1.6
 *  pollFirst();//获取并移除 如果链表为空 返回null
 *  pollLast();
 *
 *
 */
public class Test02 {
public static void main(String[] args) {
DuiLie dl = new DuiLie();


dl.myAdd("abc1");
dl.myAdd("abc2");
dl.myAdd("abc3");


while (!dl.isNull()) {
System.out.println(dl.myGet());
}


}
}

import java.util.LinkedList;


class DuiLie{
private LinkedList link;


DuiLie(){
link = new LinkedList();
}
/**
* 队列的添加元素功能
* @param obj
*/
public void myAdd(Object obj){
link.add(obj);
}


public Object myGet(){
return link.removeFirst();//堆栈就removeLast
}


public boolean isNull(){
return link.isEmpty();
}
}



public static void main(String[] args) {
ArrayList al = new ArrayList();
al.add(new Person("lisi1",21));//add接受的是Object Person转化成了Object 成为上帝了 没有getName();方法
al.add(new Person("lisi2",22));
al.add(new Person("lisi3",23));
al.add(new Person("lisi4",24));


Iterator it = al.iterator();
while(it.hasNext()){
// System.out.println(((Person) it.next()).getName());//循环中调用2次next 因为是通过角标所以很容易出错
Person p = (Person) it.next();//装自定义对象 要注意强转  如果直接打印是父类的toString()方法 是类型+哈希值没有意义
System.out.println(p.getName()+".."+p.getAge());
}
al.add(5);// 1.5以前 al.add(new Integer(5)); 1.5之后才行 因为自动装箱


show(6);//基本数据类型值 赋给引用数据类型时装箱 比如 Object num Integer num
}
//当引用数据类型和基本数据类型做运算的时候自动拆箱
private static void show(Integer num) {//Object num = new Integer(6);多态
int x = num +65; //自动拆箱 变成基本数据类型进行运算
}



/*
 * set: 元素不可以重复 是无序
 * set 接口中的方法和Collection 一致
 * Hashset //底层通过算法排序 算法变化他也变化 所以不恒久不变
 * //内部数据结构是哈希表 是不同步的
 * TreeSet
 */
public class SetTest01 {
public static void main(String[] args) {
HashSet hs = new HashSet();


hs.add("haha");
hs.add("xixi");
hs.add("xixi");//n多都进不去 保证唯一
hs.add("xixi");
hs.add("hehe");
hs.add("heihei");
hs.add("baibai");


Iterator it =hs.iterator();


while(it.hasNext()){
System.out.println(it.next());//无序保证不重复
}
/*
* function(element){
* //一个算法(哈希算法) 对元素进行分配位置 并获取其位置
*  //按照自身属性来分配 查找很快 经过算法获得位置 每个人独有 不存在另外个相同的 存在的话会出错
* //哈希如果哈希值相同会进行下一次判断 内容是否相同 
* }
*  哈希表确定元素是否相同
*  1、判断的是两个元素的哈希值是否相同
*   如果相同再判断两个对象的内容是否相同
*  
*  2、判断哈希值相同 其实判断的是对象的hashCode()的方法
*  判断内容相同 用的是equals方法
*  
*  如果哈希值不同 不需要判断equals
*/
}
}

/*
 * 往HashSet集合存储Person对象如果 姓名和年龄相同 视为同一个人 视为相同元素
 */
public class HashSet01 {


public static void main(String[] args) {
HashSet hs = new HashSet();
/*
* HashSet集合数据结构是哈希表 所以存储元素的时候
* 使用的元素的hashCode()方法来确定位置 如果位置相同 则通过元素的equals来确定
*/


hs.add(new Person("lisi1",24));
hs.add(new Person("lisi2",25));
hs.add(new Person("lisi3",23));
hs.add(new Person("lisi1",24));


Iterator it = hs.iterator();


while(it.hasNext()){//如果不重写hashCode()和equals()方法 哈希认为4个对象不同的地址值都在
Person p = (Person) it.next();
System.out.println(p.getName()+"..."+p.getAge());
}
}
}

public int hashCode() {//值
System.out.println(this+"....hashcode");
return name.hashCode()+age*39;//乘个值保证唯一
}
@Override
public boolean equals(Object obj) {//内容
if(this==obj)
return true;
if(!(obj instanceof Person))
throw new ClassCastException("类型错误");


System.out.println(this+"....hashequals"+obj);
Person p =  (Person) obj;
return this.name.equals(p.name)&&this.age == p.age;
}





阅读全文
0 0
原创粉丝点击