======================================================================
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 对像 , 那么返回负数 , 否则返回正数 .( 升序 )
例子 :
public class 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 对像 , 那么返回负数 , 否则返回正数 .( 升序 )
例子 :
public class Employee implements Comparable { // 如果想把这个 List 排序 , 则要实现这个接口 .
String
name
;
int
age
;
double
salary
;
public
Employee(String name,
int
age,
double
salary) {
this
.
name
= name;
this
.
age
= age;
this
.
salary
= salary;
}
public
int
compareTo(Object o) {
//
用来比较两个类而关系
.
实现
Comparable
接口
:
Employee e = (Employee) o;
if
(
this
.
salary
> e.
salary
)
return
-1;
else
if
(
this
.
salary
== e.
salary
) {
if
(
this
.
age
> e.
age
)
return
-1;
else
if
(
this
.
age
== e.
age
) {
return
this
.
name
.compareTo(e.
name
);
}
else
if
(
this
.
age
< e.
age
)
return
1;
else
return
0;
}
else
return
1;
}
public
String toString() {
return
"
姓名
:"
+
name
+
"
年龄
:"
+
age
+
"
薪水
:"
+
salary
;
}
}
-------------------------------------------
<1> 摹拟 ,Comparable 类的接口回调 :
public class Collections2 {
-------------------------------------------
<1> 摹拟 ,Comparable 类的接口回调 :
public class Collections2 {
public
static
void
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 {
public
static
void
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();
public
void
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.*;
public
class
student {
//
不用继承
Comparable
接口因为
set
不要求排序
,
本来就是杂乱无章的但他要覆盖
equals(),
// hashCode(),
这两个方法
(object
类中的方法
.),
用来除去
set
中相同的元素
.
//
元素定义
;
String
name
;
int
age
;
int
cpp
;
int
java
;
int
unix
;
int
total
;
//
构造方法
.
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
类中比较两个对象是否相同的方法
.
public
boolean
equals(Object o) {
if
(o ==
this
)
return
true
;
if
(o ==
null
)
return
false
;
if
(
this
.getClass() != o.getClass())
return
false
;
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
)
return
true
;
else
return
false
;
}
//
覆盖
Object
类中的返回
hashCode
的方法
.
public
int
hashCode() {
return
age
+
name
.hashCode();
}
//
返回总分
.
public
int
getTotal() {
return
cpp
+
java
+
unix
;
}
public
int
compareTo(Object o) {
student s = (student) o;
if
(
this
.getTotal() < s.getTotal())
return
1;
else
if
(
this
.getTotal() > s.getTotal())
return
-1;
else
return
0;
}
}