Java集合---List和Set
Posted Lucas小毛驴博客
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java集合---List和Set相关的知识,希望对你有一定的参考价值。
一.List集合
List接口
java.util.list
接口继承自Collection
接口,是一种单列集合。List集合主要特点是:允许出现重复的元素,元素是有序的,存入和取出的顺序是一样的,是以一种线性方式进行存储的,能够用索引来访问集合中的元素。
List接口常用的方法
public void add(int index, E element)
:在列表中指定的位置上插入指定的元素。public E get(int index)
:返回此列表中指定位置的元素public E remove(int index)
:移除此列表中指定位置的元素public E set(int index, E element)
:用指定元素替换此列表中指定位置的元素
public class ListDemo1 { public static void main(String[] args) { List<Integer> list = new ArrayList<>(); list.add(1); list.add(3); list.add(2); // 在指定位置添加add list.add(2,4); System.out.println(list); // 输出:[1, 3, 4, 2] // 删除remove list.remove(2); System.out.println(list); // 输出:[1, 3, 2] // 修改set list.set(0,11); list.set(2,22); System.out.println(list); // 输出:[11, 3, 22] // 获取List数据 get for (int i = 0; i < list.size(); i++) { System.out.print(list.get(i) + " "); // 输出:11 3 22 } } }
List的子类
ArrayList集合
ArrayList集合存储的结构是数组结构,元素增删慢,查找快,主要多用于查询数据和遍历数据。
LinkedList集合
LinkedList集合存储的结构是链表结构,元素添加,删除快。
LinkedList是一个双向链表,既继承了List的方法,LinkedList提供许多首尾操作的方法,主要有以下一些:
public void addFirst(E e)
:在此列表的开始处插入指定的元素。public void addLast(E e)
:将指定的元素插入列表的尾部。public E getFirst()
:返回此列表中的第一个元素。public E getLast()
:返回此列表中的最后一个元素。public E removeFirst()
:移除并返回此列表中第一个元素。public E removeLast()
:移除并返回此列表的最后一个元素。public E pop()
:从这个列表所表示的堆栈中弹出一个元素。public void push(E e)
:将一个元素压栈到该列表所表示的堆栈上。
public class ListDemo2 { public static void main(String[] args) { LinkedList<String> linkedList = new LinkedList<>(); // 添加元素 linkedList.addFirst("张三"); linkedList.addFirst("李四"); linkedList.addFirst("王五"); System.out.println(linkedList); // 输出:[王五, 李四, 张三] // 获取元素 System.out.println(linkedList.getFirst()); // 输出:王五 System.out.println(linkedList.getLast()); // 输出:张三 // 删除元素 System.out.println(linkedList.removeLast()); // 输出:张三 System.out.println(linkedList); // 输出:[王五, 李四] System.out.println(linkedList.removeFirst()); // 输出:王五 System.out.println(linkedList); // 输出:[李四] // 压栈 linkedList.push("赵六"); System.out.println(linkedList); // 输出:[赵六, 李四] // 出栈 System.out.println(linkedList.pop()); // 输出:赵六 } }
二.Set集合
Set接口
java.util.Set
接口继承自Collection
接口,方法Collection中的基本一致,没有做功能的扩充,只是对于Collection接口来说,Set接口更加严格。Set接口的特点:元素无序,没有索引。
因为Set集合是无序的并且没有索引,所以取出Set集合的元素可以采用迭代器或者增强for。
Set集合子类有多个,这里主要介绍两个:
java.util.HashSet
和java.util.LinkedHashSet
.Set集合子类
HashSet
HashSet是根据对象的哈希值来确定元素在集合中的存储位置的,因此具有比较良好的存储和查找性能。
HashSet保证元素的唯一性主要依赖于:hashCode和equals方法。
如果集合存储的是自定义对象,要保证元素唯一,就必须重写hashCode和equals方法。
示例:HashSet存储基本元素
public class HashSetDemo { public static void main(String[] args) { HashSet<String> hs = new HashSet<>(); hs.add("张三"); hs.add("李四"); hs.add("王五"); System.out.println(hs); // 输出:[李四, 张三, 王五] // 遍历元素 for (String s : hs) { System.out.print(s + " "); } // 输出: 李四 张三 王五 } }
示例:HashSet存储自定义对象
1.先创建自定义对象(保证元素唯一,需要重写hashCode方法和equals方法)
import java.util.Objects; public class Student { private String name; private int id; public Student() { } public Student(String name, int id) { this.name = name; this.id = id; } public String getName() { return name; } public int getId() { return id; } public void setName(String name) { this.name = name; } public void setId(int id) { this.id = id; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Student student = (Student) o; return id == student.id && Objects.equals(name, student.name); } @Override public int hashCode() { return Objects.hash(name, id); } @Override public String toString() { return "Student{" + "name='" + name + ''' + ", id=" + id + '}'; } }
2.Set集合存储
public class SetDemo1 { public static void main(String[] args) { // 1. 创建集合 HashSet<Student> hs = new HashSet<>(); // 2. 创建Student对象 Student st1 = new Student("张三", 1); Student st2 = new Student("李四", 2); Student st3 = new Student("王五",3); Student st4 = new Student("张三",1); Student st5 = new Student("李四", 5); // 3. 集合添加元素 hs.add(st1); hs.add(st2); hs.add(st3); hs.add(st4); hs.add(st5); // 4. 打印输出 for (Student s: hs) { System.out.println(s); } // 输出: /* Student{name='王五', id=3} Student{name='张三', id=1} Student{name='李四', id=5} Student{name='李四', id=2} */ } }
LinkedHashSet
上面介绍到Set集合是存进去元素是没有顺序的,如果要保证有序,则需要使用LinkedHashSet,它是链表和哈希表组合的一个数据结构。
public class LinkedHashSetDemo { public static void main(String[] args) { LinkedHashSet<String> hs = new LinkedHashSet<>(); hs.add("张三"); hs.add("李四"); hs.add("王五"); System.out.println(hs); // 输出:[张三, 李四, 王五] // 遍历元素 for (String s : hs) { System.out.print(s + " "); } // 输出: 张三 李四 王五 } }
以上是关于Java集合---List和Set的主要内容,如果未能解决你的问题,请参考以下文章