======================================================================
java第十天
======================================================================
(1) JavaSE平台:
集合: 是一个用来管理其他多个对象的对象.
分为两个接口: Collection Map
======================================================================
(2) collection:
每一个元素都是一个对象:
两个子接口:
List: 元素的存放是有顺序的,用下标表示,里面的元素是可以重复的.
Set: 无顺序的,不可重复.
子接口: SortedSet(排序的Set)
======================================================================
(3) Map
每一个元素是一个Key-value,无顺序,不重复.
子接口: SortedMap(排序的Map)
======================================================================
(4) List接口: 实现类:ArrayList() :查询效率高,增删的效率底.
ArrayList: 底层是用数组实现的.
public class ArrayList extends AbstractList :ArrayList 没有直接实现Iterator接口,而是通过缺省适配模式,ArrayList继承了AbstractList ,而AbstractList 的一个内部类实现了Iterator接口.然后里面也有一个方法,iterator().就是返回这个内部类.
小知识点: [一个接口的后面加一个s,例如: collection-->collections(一个工具类)里面的方法都是静态的,用类名调用.]
实现comparable接口:
compartTo(Object o) 如果当前对象小于o对像,那么返回负数,否则返回正数.(升序)
例子:
publicclass Employee implements Comparable { // 如果想把这个List排序,则要实现这个接口.
java第十天
======================================================================
(1) JavaSE平台:
集合: 是一个用来管理其他多个对象的对象.
分为两个接口: Collection Map
======================================================================
(2) collection:
每一个元素都是一个对象:
两个子接口:
List: 元素的存放是有顺序的,用下标表示,里面的元素是可以重复的.
Set: 无顺序的,不可重复.
子接口: SortedSet(排序的Set)
======================================================================
(3) Map
每一个元素是一个Key-value,无顺序,不重复.
子接口: SortedMap(排序的Map)
======================================================================
(4) List接口: 实现类:ArrayList() :查询效率高,增删的效率底.
ArrayList: 底层是用数组实现的.
public class ArrayList extends AbstractList :ArrayList 没有直接实现Iterator接口,而是通过缺省适配模式,ArrayList继承了AbstractList ,而AbstractList 的一个内部类实现了Iterator接口.然后里面也有一个方法,iterator().就是返回这个内部类.
小知识点: [一个接口的后面加一个s,例如: collection-->collections(一个工具类)里面的方法都是静态的,用类名调用.]
实现comparable接口:
compartTo(Object o) 如果当前对象小于o对像,那么返回负数,否则返回正数.(升序)
例子:
publicclass Employee implements Comparable { // 如果想把这个List排序,则要实现这个接口.
String name;
intage;
doublesalary;
public Employee(String name, int age, double salary) {
this.name = name;
this.age = age;
this.salary = salary;
}
publicint compareTo(Object o) { // 用来比较两个类而关系.实现Comparable接口:
Employee e = (Employee) o;
if (this.salary > e.salary)
return -1;
elseif (this.salary == e.salary) {
if (this.age > e.age)
return -1;
elseif (this.age == e.age) {
returnthis.name.compareTo(e.name);
} elseif (this.age < e.age)
return 1;
else
return 0;
} else
return 1;
}
public String toString() {
return"姓名:" + name + " 年龄:" + age + " 薪水:" + salary;
}
}
-------------------------------------------
<1>摹拟,Comparable类的接口回调:
publicclass Collections2 {
-------------------------------------------
<1>摹拟,Comparable类的接口回调:
publicclass Collections2 {
publicstaticvoid a(List list) {
for (int i = 0; i < list.size(); i++) {
for (int j = i + 1; j < list.size(); j++) {
Object o1 = list.get(i);
Object o2 = list.get(j);
Comparable c1 = (Comparable) o1; // 接口的回调.
Comparable c2 = (Comparable) o2; // 接口的回调.
if (c1.compareTo(c2) > 0) {
Collections.swap(list, i, j); //Collections里面的井台方法:
}
}
}
}
}
---------------------------------------------------------
<2> 用LinkList实现而栈;//因为栈牵涉而都是元素的增删因此要用到增删效率高的链表.publicclass TestMyStack {
---------------------------------------------------------
<2> 用LinkList实现而栈;//因为栈牵涉而都是元素的增删因此要用到增删效率高的链表.publicclass TestMyStack {
publicstaticvoid main(String[] args) {
MyStack stack = new MyStack();
stack.push("ChenPy");
stack.push("Chenzq");
stack.push("Fanlb");
stack.push("YangQing");
System.out.println(stack.pop());
System.out.println(stack.pop());
System.out.println(stack.pop());
System.out.println(stack.pop());
}
}
class MyStack {
private LinkedList ll = new LinkedList();
publicvoid push(Object o) {
ll.addFirst(o);
}
public Object pop() {
return ll.removeFirst();
}
}
======================================================================
(5) LinkedList 底层是用链表实现的. 增删效率高,查询效率低.ArrayList: 是轻量级的.消耗资源少.线程不安全
Vector: 是重量级的,消耗资源多,线程比较安全.(多线程访问的时候)
======================================================================
(6) HashSet : Hash算法.保证元素不重复: 覆盖equals(), hashCode();
hastCode(): 覆盖他的时候尽量保证,返回的哈希码不同.用来保证效率.
例子:
import java.util.*;
publicclass student {// 不用继承Comparable接口因为set不要求排序,本来就是杂乱无章的但他要覆盖equals(),
// hashCode(),这两个方法(object 类中的方法.),用来除去set中相同的元素.
// 元素定义;
String name;
intage;
intcpp;
intjava;
intunix;
inttotal;
// 构造方法.
public student(String name, int age, int cpp, int java, int unix) {
this.name = name;
this.age = age;
this.cpp = cpp;
this.java = java;
this.unix = unix;
}
// 覆盖Object 类中的返回对象的方法.
public String toString() {
return"姓名: " + name + " 年龄: " + age + "总成绩: " + this.getTotal();
}
// 覆盖Object类中比较两个对象是否相同的方法.
publicboolean equals(Object o) {
if (o == this)
returntrue;
if (o == null)
returnfalse;
if (this.getClass() != o.getClass())
returnfalse;
student s = (student) o;
if (this.name.equals(s.name) && this.age == s.age && this.cpp == s.cpp
&& this.java == s.java && this.unix == s.unix)
returntrue;
else
returnfalse;
}
// 覆盖Object类中的返回hashCode的方法.
publicint hashCode() {
returnage + name.hashCode();
}
// 返回总分.
publicint getTotal() {
returncpp + java + unix;
}
publicint compareTo(Object o) {
student s = (student) o;
if (this.getTotal() < s.getTotal())
return 1;
elseif (this.getTotal() > s.getTotal())
return -1;
else
return 0;
}
}