类集

作者: 你的益达233 | 来源:发表于2020-02-03 16:31 被阅读0次

类集

类集实际上是一个动态的对象数组,一般的对象数组存在一个长度的限制。类集则可以任意扩充

Collection父接口

定义了基本的操作方法,如添加,删除,是否存在某个对象/对象集,是否为空
它的子接口:List、Set、Queue、SortedSet
很少直接使用Collection接口,而是使用子类,这样可以操作意义明确:如要不要重复,要不要排序等操作明确

List接口

特点:内容可以重复,可以根据索引输出(get(i))

多用它的子类ArrayList实例化
示例代码:

List<String> list = new ArrayList<>();
    list.add("nihao");
    list.add(0,"tahao");

list.add(0,"tahao");不会替换0位元素,之前的元素往后移

1、删除操作:remove(obj):如果obj没有,不会报错。如果obj错在多个,只会删除第一个

2、转为数组对象: Object[] obj = list.toArray()

3、截取部分集合:List<E> subList(int fromIndex, int toIndex)

4、查找对象是否存在:indexOf(obj)或者contains(obj),contains效率相当高点,不返回位置索引,但是本质也是调用indexOf方法

ArrayList子类:

1、底层采用数组实现,
2、实现了Cloneable接口,即覆盖了函数clone(),能被克隆
3、java.io.Serializable接口,这意味着ArrayList支持序列化,能通过序列化去传输

LinkedList子类:一个链表的操作类(使用较少)

Set接口

特点: 内容不能重复,依靠hashCode()和equals()完成重复元素的判断

HashSet子类:内容是无序的

Set<String> setS = new HashSet<String>();

TreeSet子类:内容是有序的,是可以自动排序的。

Set<String> setS = new TreeSet<String>();
TreeSet的排序原理:依靠Comparable接口完成排序,比如String本身继承Comparable接口,覆写compareTo方法
注意自定义类的中属性每个都要在compareTo中排序,String也需要
去除重复元素原理: hashCode():表示一个唯一的编码,一般通过计算表示 equals():进行对象的比较操作
示例代码:Person类

class Person implements Comparable<Person>{
private String name;
private int age;

public Person(String name, int age) {
    this.name = name;
    this.age = age;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public int getAge() {
    return age;
}

public void setAge(int age) {
    this.age = age;
}

@Override
public String toString() {
    return "姓名:"+name+"\t"+"年龄:"+age;
}

@Override
public boolean equals(Object obj) {
    if (this == obj){
        return true;
    }
    if (!(obj instanceof Person)){
        return false;
    }
    Person p = (Person)obj;
    if (this.age == p.age && this.name.equals(p.name)){
        return true;
    }

    return false;
}

@Override
public int hashCode() {
    return this.name.hashCode()*this.age;
}

@Override
public int compareTo(Person person) {
    if (this.age == person.age){
        return this.name.compareTo(person.name);
    }
    return 1;
}
}

SortedSet接口

TreeSet是SortedSet的子类

Iterator接口

重点:在使用集合输出的时候必须形成以下的一个思路:只要是碰到了集合输出的操作,就一定使用Iterator接口,因为这是标准的做法
示例代码:
public class IteratorDemo {

public static void main(String[] args){
    List<String> list = new ArrayList<>();
    list.add("小明");
    list.add("小黑");
    list.add("小红");

    Iterator iterator = list.iterator();
    while (iterator.hasNext()){
        System.out.println(iterator.next());
    }
}
}

ListIterator接口

是List接口的子类,可以实现双向输出,由后往前输出

Map接口

Map.Entry是Map内部的接口,即Map存的还是一个个对象,该对象就是Map.Entry,然而Map.Entry存放key和value

Map的子类:

HashMap:无序存放的,是新的操作类,Key不允许重复
HashTable:无序存放的,是旧的操作类,key不允许重复
TreeMap:可以排序的Map集合,按集合中的key排序,key不允许重复
IdentityHashMap:key可以重复的Map集合
WeakHashMap:弱引用,希望集合可以自动清理暂时不用的数据。如调用System.gc()

HashMap与Hashtable的区别:HashMap是新的操作类,采用异步处理方式,性能更高。Hashtable是旧的操作类,采用同步处理,性能较低

IdentityHashMap的key是比较地址的,只要地址不同都可以添加进去

Map<String,String> map = new IdentityHashMap<>();
    map.put("A","111");
    map.put("A","222");
    map.put("C","333");

因为A地址相同,没有new,第二个A会替换第一个

相关操作:

  1. containsXXX判断是否存在key或者value
  2. Set《T》 keySet = map.keySet():等到全部key
  3. Collection<String> values = map.values() 等到全部value

TreeMap可以方便完成排序操作,如果是自定义类作为key,一定要实现Comparable接口,重写compareTo方法实现比较规则

SortedMap接口

子类TreeMap实例化

Collections:集合工具类

Collections与Collection联想:Collections和Collection接口没有任何关系,是继承Object类,但是与集合中的各个接口都有操作方法的支持

Properties:属性类

是Hashtable的子类,也是Map的子类,但一般单独使用

public static void main(String[] args){
    Properties properties = new Properties();
    properties.setProperty("A","111111");
    properties.getProperty("A");
}  

读取area.properteis文件
File file = new File(xx/area.properties)
pro.load(new FileInputStream(file))
properties.getProperty("A");

重点:改变集合中的某个item,也会影响集合,这也是Adapter中getDatas中的item,修改后,刷新列表,列表会起作用

示例代码:
Set<Person> personSet = new TreeSet<Person>();
Person per1 = new Person("小明",10);
personSet.add(per1);
personSet.add(new Person("小红",20));
personSet.add(new Person("小东",30));
personSet.add(new Person("小黑",20));

    per1.setName("小小");

栈:先进后出

对象的引用强度

强引用:当内存不足时,JVM宁可出现OutOfMemeryError错误而试程序停止,也不会回收此对象来释放空间
软引用:当内存不足时,会回收这些对象的内存,用来实现内存敏感的高速缓存
弱引用:无论内存是否紧张,被垃圾回收器发现立即回收

相关文章

  • 第41节:Java当中的类集框架

    Java当中的类集框架 类集框架,那么什么是类集框架,集合的种类有哪些,类集框架的基础结构。 类集框架是一组类和接...

  • 类集

    类集 类集实际上是一个动态的对象数组,一般的对象数组存在一个长度的限制。类集则可以任意扩充 Collection父...

  • Java类集框架

    类集框架简介   从JDK1.2开始,Java中引入了类集开发框架,所谓的类集指的是一套动态对象数组的实现方案,在...

  • springboot JdbcTemplate

    jdbc 将结果集映射到list实体类 jdbc 将结果集映射到单个实体类

  • 类集框架

    1.介绍 定义:是一组类和接口,它们都处于java.util包,主要用于存储和管理对象。 分类:它们是Set(集)...

  • Java类集

    类集框架 在保存一组对象的时候,按照之前做法则只能使用对象数组,但是对象数组操作本省有一个限制,就是数组有长度的限...

  • 类集简介

    类集就是一组java实现的数据结构,或者再简单一点,所谓的类集就是对象数组的应用。 再之前讲解的时候,如果想要保存...

  • 类集框架

    类集框架:是 一组类和接口位于 java.util包中用于 存储和管理对象主要分三大类,集合、列表、映射 类集框架...

  • 将一个List.map根据父节点ID转成树状结构

    工具类 使用方法 结果集 原始数据 结果集

  • 文本分类-训练集文本预处理

    一、文本预处理阶段### 1.1 设定训练集和测试集 训练集每一类的数量为500个文档,测试集每一类的数量也为50...

网友评论

      本文标题:类集

      本文链接:https://www.haomeiwen.com/subject/zanhxhtx.html