Java集合

JAVA中的集合框架

Alt text

List(列表)

  • List是元素有序并且可以重复的集合,称为序列
  • List可以精准的控制每个元素的插入位置,或删除某个位置的元素
  • List的两个主要实现类是ArrayList和LinkedList

ArrayList

  • ArrayList底层是由数组实现的
  • 动态增长,以满足应用程序的需求
  • 在列表尾部插入或者删除非常有效
  • 更适合查找和更新元素
  • ArrayList中元素可以为null
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    List list=new ArrayList();
    list.add("hadoop");
    list.add("spark");
    list.add("Go");
    list.add("swift");
    //输出列表中元素的个数
    System.out.println("列表中元素的个数为:"+list.size());

    //遍历输出所有编程语言
    System.out.println("**************************************");
    for(int i=0;i<list.size();i++){
    System.out.print(list.get(i)+",");
    }

    //移除列表中的Go
    System.out.println();
    //list.remove(2);
    list.remove("Go");
    System.out.println("**************************************");
    System.out.println("移除Go以后的列表元素为:");
    for(int i=0;i<list.size();i++){
    System.out.print(list.get(i)+",");
    }

LinkedList

  1. 概述
  • 与ArrayList一样,LinkedList也按照索引位置排序,但她的元素之间是双向链接的(双向链表)
  • 适合快速的插入和删除数据
  • LinkedList实现了List和Queue两个接口
  1. 构造方法
方法名 说明
LinkedList() 构造一个空列表
LinkedList(Collection<? extends E> c) 构造一个包含指定collection中元素的列表,这些元素按照collection的迭代器返回的顺序排列

Set

  • Set是元素无序并且不可以重复的集合,被称为集

HashSet

  • HashSet是Set的一个重要实现类,成为哈希集
  • HashSet中的元素无序并且不可以重复
  • HashSet中只允许一个null元素
  • 具有良好的存取和查询性能

Iteratior(迭代器)

  • Iterator接口可以以统一的方式对各种集合元素进行遍历
  • hasNext()方法检测集合中是否有下一个元素
  • next()方法返回集合中的下一个元素
  • 迭代器只能使用一次,如果想再次使用需要重新构造
1
2
3
4
Iterator it = mySet.iterator();//mySet 为集合的名称
while (it.hasNext()) {
System.out.println(it.next());
}

Map

  • Map中的数据是以键值对(key-value)的形式存储的
  • key-value以Entry类型的对象实例存在
  • 可以通过key值快速地查找value
  • 一个映射不能包含重复的键
  • 每个键最多只能映射一个值
    ####HashMap
  • 基于哈希表的Map接口的实现
  • 允许使用null值和null键
  • key值不允许重复
  • HashMap中的Entry对象是无序排列的

自定义对象存储在set中时,需要重写对象是否重复的比较方法

重写hashCode()方法(使用自动生成的默认也可以)和equals()方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + month;
result = prime * result + ((name == null) ? 0 : name.hashCode());
result = prime * result + ((species == null) ? 0 : species.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
//判断对象是否相等,相等则返回true,不用继续比较属性了
if(this==obj)
return true;
//判断obj是否是Cat类的对象
if(obj.getClass()==Cat.class){
Cat cat=(Cat)obj;
return cat.getName().equals(name)&&(cat.getMonth()==month)&&(cat.getSpecies().equals(species));
}
return false;
}
-------------End Of This ArticleThank You For Reading-------------