Java学习笔记10

 
======================================================================
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 {
       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 { 
       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;
       }
}
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

炼丹狮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值