黑马程序员——常用API

------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------


LinkedList类
LinkedList底层数据结构链表实现,记录对象地址的方式存储


查询慢,增删快,线程也是不安全的,执行效率高


LinkedList类的特有方法


addFirst(Object obj)将元素添加到链表开头


addLast(Object obj)将元素添加到链表结尾


Object getFirst()获取链表的开头


Object getLast()获取链表的结尾


Object removeFirst()移除链表的开头,返回被移除前的对象


Object removeLast()移除链表的结尾, 返回被移除前的对象


JDK1.6开始,有n个新的方法,把以前的方法取代,不做掌握


offerFirst()-->addFist() 返回值不同add开头的没有返回值,offer开头返回boolean


offerLast()-->addLast()


peekFirst()-->getFirst()get开头没有元素,出异常,peek开头没有元素返回null,没异常


peekLast()-->getLast()


pollFirst()-->removeFirst()


pollLast()-->removeLast()6. LinkedList类


代码:
/*
 * 使用LinkedList模拟队列和堆栈
 * 自己写一个类,实现数据的堆栈和队列功能
 * 让用户在main方法中,调用自己写的类
 * 思想转换:
 *   自己写方法,调用JDK中的类,实现的
 *   自己写方法,自己的方法中,封装了JDK中类的功能
 *   调用者,用的是我们自己的方法
 */
import java.util.*;
//实现数据的堆栈和队列,类中封装LinkedList功能
class MyDate{
private LinkedList link = null;
MyDate(){link = new LinkedList();}
//提高一个添加对象的功能,其实调用LinkedList的add方法
public void add(Object obj){
link.add(obj);
}
//返回对象,实现先进先出
public Object get(int x){
return link.removeFirst();
}
public Object get(){
return link.removeLast();
}
public boolean isEmpty(){
return !link.isEmpty();
}
}


public class LinkedListTest {
public static void main(String[] args) {
MyDate my = new MyDate();
my.add("abc1");
my.add("abc2");
my.add("abc3");
while(my.isEmpty()){//!link.isEmpty()
System.out.println(my.get());
}

}
}
哈希值
每一个对象,在建立的时候存储在内存堆中,JVM对每一个对象,根据底层的一个算法,哈希算法,


计算出来一个十进制数,十进制就是哈希值。程序人员开发时候的一个参考,仅此而已


Object类,定义了一个方法  public int hashCode()计算对象的哈希值的,所有的子类都有这个哈希值.


出现是为了哈希表而来的,本身,没有地址意义,HashSet,存储的其实是对象的哈希值


HashSet集合的存储过程,存储对象的时候,先调用对象的hashCode方法,获取该对象的哈希值(十进制数),


HashSet看看这个数以前存储过没有,如果没有存储过,就将这个哈希值存储到自己的哈希表中


实现去掉重复的元素,让姓名和年龄相同的对象,具有相同的哈希值。


覆盖hashCode方法


存储到HashSet中的对象,保证对象的唯一性,必须重写hashCode和equals方法


Set集合
Set集合派系的特点:
不允许存储重复的元素


没有下标


无序的集合,存储和取出的顺序不一定的


  Set接口中的方法,和Collection接口中的方法一致
代码:


/*
 * TreeSet存储自定义对象
 */
import java.util.*;
public class TreeSetDemo1 {
public static void main(String[] args) {
/*
String s1 = "bbc";
String s2 = "bbc";
//String类中,有一个方法,可以获取到字符串的字典顺序
int num =s1.compareTo(s2);
System.out.println(num);*/

TreeSet ts = new TreeSet();
ts.add(new Person("lisi",20));
ts.add(new Person("zhangsan",22));
ts.add(new Person("lisa",30));
ts.add(new Person("xiaoqiao",18));
ts.add(new Person("daqiao",23));
Iterator it = ts.iterator();
while(it.hasNext()){
Person p = (Person)it.next();
System.out.println(p);
}
}
}


HashSet类
HashSet类的特点
底层数据结构哈希表


HashSet本身没有功能,功能来自于HashMap


HashSet调用的是HashMap的功能


无序的


允许存储null


线程不安全,不同步,执行效率高


将姓名和年龄的人,视作同一个对象,不要存储了


//实现Comparable接口,让Person具备自然顺序
//自然顺序,我们自己定义的,比较姓名,姓名相同,比较年龄
public class Person implements Comparable{
private String name;
private int age;
public Person(String name,int age){
this.age = age;
this.name = name;
}
//ts.add(new Person("lisi",20));
//ts.add(new Person("zhangsan",22));
public int compareTo(Object obj){
//this 后进来的, obj先进来的对象
Person p = (Person)obj;
int num = this.name.compareTo(p.name);
return num == 0 ? this.age - p.age : num;
}

//同名,同年龄的人,具有相同的哈希值
//hs.add(new Person("zhangsan",22));
    //zhangsan 100 + 22 * 15= 144
//lisi 90 + 32*15 = 154
public int hashCode(){
//利用name变量 age变量
return name.hashCode()+22*13;

}

//同名的,和同年龄的对象,返回真
public boolean equals(Object obj){
if( this == obj)
return true;
if(obj == null)
return false;
if(obj instanceof Person){
Person p = (Person)obj;
//this对象中的姓名和年龄,p对象中的姓名和年龄
//名字是String类型
return this.name.equals(p.name) && this.age == p.age;
}
return false;
}
public String toString(){
return "Person ..." + this.name +"..."+this.age;
}

}


/*
 * HashSet,存储自定义对象
 * 并且用迭代器取出
 * 存储Person
 */
import java.util.*;
public class HashSetDemo {
public static void main(String[] args) {
HashSet hs = new HashSet();
hs.add(new Person("lisi",20));
hs.add(new Person("zhangsan",22));
hs.add(new Person("zhangsan",22));
hs.add(new Person("lisa",30));
hs.add(new Person("xiaoqiao",18));
hs.add(new Person("daqiao",23));
hs.add(new Person("daqiao",23));


Iterator it = hs.iterator();
while(it.hasNext()){
//Person p = (Person)it.next();
System.out.println(it.next());
}
}
}


TreeSet类
底层数据结构二叉树


线程不安全的,执行效率高


对存储到集合的对象,进行排序(对象的自然顺序 0-9 a-z)


将自定义的对象Person存储到TreeSet集合,出现了类型转换异常


ClassCastException :原因,Person不能被转成java.lang.Comparable


TreeSet中,需要对Person进行排序,可是你的Person对象,不具备自然顺序。


可以让Person具备自然顺序,实现Comparable接口.


没有学不好,只有不努力~~——至自己!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值