Java学习笔记10

本文深入讲解Java集合框架的基础概念,包括List、Set、Map等核心接口及其典型实现类的特点与应用场景,如ArrayList、LinkedList、HashSet等,并探讨了如何实现自定义对象的排序与去重。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 
======================================================================
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 {
       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 { 
       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;
       }
}
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

炼丹狮

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

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

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

打赏作者

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

抵扣说明:

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

余额充值