java数据结构与集合

集合

1.数组和集合的区别

  • 相同点
    • 都是容器,可以存储多个数据
  • 不同点
    • 数组的长度是不可变的,集合的长度是可变的
    • 数组可以存储基本数据类型和引用数据类型,几个只能存储引用数据类型,如果要存储基本数据类型,需要存对应的包装类

2.遍历集合

  • 迭代器
    • Iterator it = c.iterator();
      • hasNext() 判读当前位置还有没有元素
      • next() 获取当前位置的元素,并将迭代器对象移向下一个索引位置
      • remove() 删除迭代器对象当前指向的元素
  • 增强for
    • for(String str : list){
      System.out.println(str);
      }

3.数据结构

    • 先进后出
  • 队列
    • 先进先出
  • 数组
    • 查询快,增删慢
  • 链表
    • 查询慢,增删快

4.泛型

  • 介绍
    • JDK5中引入的特性,提供了编译时类型安全检测机制
  • 好处
    • 把运行时期的问题提前到了编译期间
    • 避免了强制类型转换
  • 定义格式
    • <类型> 指定一种类型的格式,
    • <类型1,类型2,…> 指定多种类型,用逗号隔开, <E,T><K,V>
  • 泛型类
    • 修饰符 class 类名<类型>{ }
  • 泛型方法
    • 修饰符 <类型> 返回值类型 方法名(类型 变量名) { }
  • 泛型接口
    • 修饰符 interface 接口名<类型>{ }
  • 类型通配符<?>
    • 上限
      • <? extends Number> Number或者其子类
    • 下限、
      • <? super Number> Number或其父类

单列集合

1.Collection

  • 概述
    • 单列集合的顶层接口,它表示一组对象
    • JDK不提供此接口的任何直接实现,它提供更具体的子接口(如Set\List)实现
  • 常用方法
    • add() 添加元素
    • remove() 删除指定的元素
    • remove() 根据条件删除
    • clear() 清空集合
    • contains() 判断指定元素是否存在
    • isEmpty() 判断集合是否为空
    • size() 集合的长度

2.List

  • 特点
    • 存取有序
    • 可以存重复元素
    • 可以控制每个元素插入的位置,可以用索引访问元素
  • 特有方法
    • add(index , E) 在指定位置插入指定元素
    • remove(index) 删除指定索引的元素,返回被删除的元素
    • set(index , E) 修改指定索引的元素,返回被修改的元素
    • get(index) 获取指定索引的元素
  • 遍历方式
    • 迭代器
    • 增强/普通for

3.ArrayList

  • 特点
    • 底层是数组结构实现,查询快,增删慢

3.LinkedList

  • 特点
    • 底层是链表结构实现,查询慢,增删快
  • 特有方法
    • addFirst(E) 在列表开头插入指定元素
    • addLast(E) 在列表末尾插入指定元素
    • getFirst() 获取列表中的第一个元素
    • getLst() 获取最后一个元素
    • removeFirst() 删除第一个元素
    • removeLast() 删除最后一个元素

4.Set

  • 特点
    • 不可以存储重复元素
    • 没有索引
  • 遍历方式
    • 迭代器
    • 增强for

5.TreeSet

  • 特点
    • 不可以存储重复元素
    • 没有索引
    • 可以将元素按照规则进行排序
      • TreeSet():根据其元素的自然排序进行排序
      • TreeSet(Comparator comparator) :根据指定的比较器进行排序
  • Comparable自然排序
    • 使用空参构造创建TreeSet集合
    • 自定义类实现Comparable接口
    • 自定义类重写compareTo方法
      @Override
      public int compareTo(Student o) {
      //按照对象的年龄进行排序
      //主要判断条件: 按照年龄从小到大排序
      int result = this.age - o.age;
      //次要判断条件: 年龄相同时,按照姓名的字母顺序排序
      result = result == 0 ? this.name.compareTo(o.getName()) : result;
      return result;
      }
  • Comparator比较器排序
    • 使用带参构造创建TreeSet集合

    • 让构造方法接受Comparator的实现类对象,重写comparae(T o1,t o2)方法

    • 排序规则必须按照要求的主要条件和次要条件来写
      //创建集合对象
      TreeSet ts = new TreeSet<>(new Comparator() {
      @Override
      public int compare(Teacher o1, Teacher o2) {
      //o1表示现在要存入的那个元素
      //o2表示已经存入到集合中的元素

              //主要条件
              int result = o1.getAge() - o2.getAge();
              //次要条件
              result = result == 0 ? o1.getName().compareTo(o2.getName()) : result;
              return result;
           }
      });
      
  • 两种比较方式返回值规则
    • 返回值为负数,表示当前存入的元素较小,存左边
    • 返回值为0,表示当前存入的元素跟集合中元素重复了,不存
    • 返回值为正数,表示当前存入的元素较大,存右边

6.HashSet

  • 特点
    • 底层数据结构是哈希表
    • 存取无序
    • 不可以存储重复元素
    • 没有索引
  • 存储自定义元素时,要想实现元素的唯一,要求必须重写hasCode和equals方法

双列集合

1.Map

  • 特点
    • 双列集合,一个键对应一个值
    • 键不可以重复,值可以
  • 常用方法
    • put(key, value) 添加元素
    • remove(key) 根据键删除元素
    • clear() 清空集合
    • containsKey(key) 判断是否含有指定的键
    • containsValue(value) 判断是否含有指定的值
    • isEmpty() 判断集合是否为空
    • size() 集合长度
    • get(key) 根据建获取值
    • keySet() 获取所有键的集合
    • values() 获取所有值的集合
    • enntrySet() 获取所有键值对集合的对象
  • 遍历方式
    • 获取键的集合,使用增强for根据键找值,
    • 获取键值对的集合,使用增强for获得每一个entry,再获取每一个entry的键和值

2.hashMap

  • 特点
    • 底层是哈希表结构

    • 依赖hashCode方法和equals方法保证键的唯一

    • 如果键要存储的是自定义对象,需要重写hashCode和equals方法
      public class Student(){
      @Override
      public boolean equals(Object o) {
      if (this == o) return true;
      if (o == null || getClass() != o.getClass()) return false;
      Student student = (Student) o;
      if (age != student.age) return false;
      return name != null ? name.equals(student.name) : student.name == null;
      }

      	@Override
      	public int hashCode() {
          	int result = name != null ? name.hashCode() : 0;
          	result = 31 * result + age;
         	 	return result;
      	}
      }
      

3.TreeMap

  • 特点
    • 底层是红黑树结构

    • 依赖自然排序或者比较器排序,对键进行排序

    • 如果键存储的是自定义对象,需要实现Comparable接口或者在创建TreeMap对象时候给出比较器排序规则
      public class Student implements Comparable{

          @Override
          public int compareTo(Student o) {
              //按照年龄进行排序
              int result = o.getAge() - this.getAge();
              //次要条件,按照姓名排序。
              result = result == 0 ? o.getName().compareTo(this.getName()) : result;
              return result;
          }
      }
      
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值