List (链表|线性表)

特点: 接口,可存放重复元素,元素存取是有序的,允许在指定位置插入元素,并通过索引来访问元素

1、创建一个用指定可视行数初始化的新滚动列表。默认情况下,不允许进行多项选择。

注意,这是 List(rows, false) 的一种便捷方法。还要注意,列表中的可视行数一旦创建就不能更改。

  1. public List(int rows)------------------row-----要显示的项数

2、创建一个初始化为显示指定行数的新滚动列表。

注意,如果指定了零行,则会按默认的四行创建列表。还要注意,列表中的可视行数一旦创建就不能更改。

如果 multipleMode 的值为 true,则用户可从列表中选择多项。如果为 false,则一次只能选择一项。

  1. public List(int rows,boolean multipleMode)-------rows - 要显示的项数。
    -------multipleMode - 如果为 true,则允许进行多项选择;否则,一次只能选择一项。

综上所述:如果抛出为throws-----GraphicsEnvironment.isHeadless(),则返回 true。

Set(集)

特点: 不可以存放重复元素,元素存取是无序的

Collection(接口)

1、特点:描述的是集合共有的功能(描述所有接口的共性)

2、Collection接口有两个子接口:

List(链表|线性表)

Set(集)

集合整理

Collection

我们需要保存若干个对象的时候使用集合。

List

如果我们需要保留存储顺序, 并且保留重复元素, 使用List.

如果查询较多, 那么使用ArrayList

如果存取较多, 那么使用LinkedList

如果需要线程安全, 那么使用Vector

Set

如果我们不需要保留存储顺序, 并且需要去掉重复元素, 使用Set.

如果我们需要将元素排序, 那么使用TreeSet

如果我们不需要排序, 使用HashSet, HashSet比

TreeSet效率高.

如果我们需要保留存储顺序, 又要过滤重复元素, 那么使用LinkedHashSet

Collection接口的共性方法

增加:

1:add()   将指定对象存储到容器中

add 方法的参数类型是Object 便于接收任意对象

2:addAll() 将指定集合中的元素添加到调用该方法和集合中

删除:

3:remove() 将指定的对象从集合中删除

4:removeAll() 将指定集合中的元素删除

修改

5:clear() 清空集合中的所有元素

判断

6:isEmpty() 判断集合是否为空

7:contains() 判断集合何中是否包含指定对象

8:containsAll() 判断集合中是否包含指定集合

使用equals()判断两个对象是否相等

获取:   9:int size()    返回集合容器的大小

转成数组10: toArray()   集合转换数组

实例练习:

  1. 1 //创建Person类
  2. 2 class Person {
  3. 3 private String name;
  4. 4 private int age;
  5. 5
  6. 6 public Person() {
  7. 7
  8. 8 }
  9. 9
  10. 10 public Person(String name, int age) {
  11. 11
  12. 12 this.name = name;
  13. 13 this.age = age;
  14. 14 }
  15. 15
  16. 16 @Override
  17. 17 public int hashCode() {
  18. 18 return this.name.hashCode() + age;
  19. 19 }
  20. 20
  21. 21 @Override
  22. 22 public boolean equals(Object obj) {
  23. 23 if (!(obj instanceof Person)) {
  24. 24 return false;
  25. 25 }
  26. 26 Person p = (Person) obj;
  27. 27 return this.name.equals(p.name) && this.age == p.age;
  28. 28 }
  29. 29
  30. 30 @Override
  31. 31 public String toString() {
  32. 32 return "Person :name=" + name + ", age=" + age;
  33. 33 }
  34. 34
  35. 35 }
  36. 36
  37. 37 public static void main(String[] args) {
  38. 38 Person p1 = new Person("李华", 19);
  39. 39 Person p2 = new Person("尹乐乐", 20);
  40. 40 Person p3 = new Person("洛洛", 18);
  41. 41 Collection list = new ArrayList();
  42. 42 list.add(p1);
  43. 43 list.add(p2);
  44. 44 list.add(p3);
  45. 45 // isEmpty() 判断集合是否为空
  46. 46 boolean empty = list.isEmpty();
  47. 47 System.out.println(empty);
  48. 48 // 返回集合容器的大小
  49. 49 int size = list.size();
  50. 50 System.out.println(size);
  51. 51 // contains()判断集合何中是否包含指定对象
  52. 52 boolean contains = list.contains(p1);
  53. 53 System.out.println(contains);
  54. 54
  55. 55 // remove(); 将指定的对象从集合中删除
  56. 56 list.remove(p1);
  57. 57
  58. 58 // clear() 清空集合中的所有元素
  59. 59 list.clear();
  60. 60 System.out.println(list);
  61. 61
  62. 62 }

分析总结:

1:Person类

1:姓名和年龄

2:重写hashCode和equals方法

1、如果不重写,调用Object类的equals方法,判断内存地址,为false

2、如果是Person类对象,并且姓名和年龄相同就返回true

3、如果不重写,调用父类hashCode方法,如果equals方法相同,那么hashCode也要相同,需要重写hashCode方法

3:重写toString方法

注:不重写,直接调用Object类的toString方法,打印该对象的内存地址

注:list、ArrayList、LinkedList、Vector的区别

1、List:元素是有序的(怎么存的就怎么取出来,顺序不会乱),元素可以重复(角标1上有个3,角标2上也可以有个3)因为该集合体系有索引。

List:特有的方法,凡是可以操作角标的方法都是该体系特有的方法。

2、ArrayList:1、底层的数据结构使用的是数组结构(数组长度是可变的百分之五十延长)。

2、特点:是查询很快,但增删较慢,线程不同步(数组查询快的原因是:数组的内存空间地址是连续的)。

3、ArrayList底层维护了一个Object[] 用于存储对象,默认数组的长度是10,当默认的或者指定的容量不够存储对象的时候,容量自动增长为原来的容量的1.5倍。

4、单线程效率高。

实例:  去除ArrayList集合中重复元素

1:存入字符串元素

2:存入自定义对象元素(如Perosn对象)

原理:

循环遍历该集合,每取出一个放置在新的集合中,放置之前先判断新的集合是否以包含了新的元素。

  1. public class Demo2 {
  2. public static void main(String[] args) {
  3. ArrayList arr = new ArrayList();
  4. Person p1 = new Person("jack", 20);
  5. Person p2 = new Person("rose", 18);
  6. Person p3 = new Person("rose", 18);
  7. arr.add(p1);
  8. arr.add(p2);
  9. arr.add(p3);
  10. System.out.println(arr);
  11. ArrayList arr2 = new ArrayList();
  12. for (int i = 0; i < arr.size(); i++) {
  13. Object obj = arr.get(i);
  14. Person p = (Person) obj;
  15. if (!(arr2.contains(p))) {
  16. arr2.add(p);
  17. }
  18. }
  19. System.out.println(arr2);
  20. }
  21. }
  22.  
  23. class Person {
  24. private String name;
  25. private int age;
  26.  
  27. public Person() {
  28.  
  29. }
  30.  
  31. public Person(String name, int age) {
  32.  
  33. this.name = name;
  34. this.age = age;
  35. }
  36.  
  37. public String getName() {
  38. return name;
  39. }
  40.  
  41. public void setName(String name) {
  42. this.name = name;
  43. }
  44.  
  45. public int getAge() {
  46. return age;
  47. }
  48.  
  49. public void setAge(int age) {
  50. this.age = age;
  51. }
  52.  
  53. @Override
  54. public int hashCode() {
  55. return this.name.hashCode() + age * 37;
  56. }
  57.  
  58. @Override
  59. public boolean equals(Object obj) {
  60. if (!(obj instanceof Person)) {
  61. return false;
  62. }
  63. Person p = (Person) obj;
  64.  
  65. return this.name.equals(p.name) && this.age == p.age;
  66. }
  67.  
  68. @Override
  69. public String toString() {
  70. return "Person@name:" + this.name + " age:" + this.age;
  71. }
  72.  
  73. }

3、LinkedList:底层的数据结构是链表结构(特点是查询较慢,增删较快)。

特有方法:addFirst(E e)、getFirst(E e) 、removeFirst(E e)

如果集合中没有元素,获取或者删除元素抛:NoSuchElementException

4、Vector:1、底层是数组数据结构 线程同步(数组长度是可变的百分之百延长),(无论查询还是增删都很慢,被ArrayList替代了)

2、多线程安全的,所以效率低。

3、特有的方法:

void addElement(E obj)  在集合末尾添加元素

E elementAt( int index) 返回指定角标的元素

Enumeration elements()  返回集合中的所有元素,封装到Enumeration对象中测试此枚举是否包含更多的元素。

E nextElement()    如果此枚举对象至少还有一个可提供的元素,则返回此枚举的下一个元素。

Enumeration 接口: boolean hasMoreElements()

注:1、可以使用该集合去模拟出队列(先进先出) 或者堆栈(后进先出) 数据结构,堆栈(后进先出)。

2、有一批数据要存储,要求存储这批数据不能出现重复数据,ArrayList、LinkedList都没法满足需求。解决办法:使用 set集合。

数据结构

1:栈 (1.6)

先进后出

push()

pop()

2:队列(双端队列1.5)

先进先出

offer()

poll()

3:返回逆序的迭代器对象   descendingIterator()   返回逆序的迭代器对象

  1. //迭代
  2. import java.util.Iterator;
  3. import java.util.LinkedList;
  4.  
  5. public class Demo3 {
  6. public static void main(String[] args) {
  7. LinkedList list = new LinkedList();
  8. list.add("微信");
  9. list.add("微博");
  10. list.add("淘宝");
  11. list.add("京东");
  12. list.add("阿里巴巴");
  13. Iterator it = list.iterator();
  14. // Iterator it = list.descendingIterator();//逆序迭代
  15. while (it.hasNext()) {
  16. String next = (String) it.next();
  17. System.out.println(next);
  18. }
  19. }
  20. }

集合中list、ArrayList、LinkedList、Vector的区别、Collection接口的共性方法以及数据结构的总结的更多相关文章

  1. ArrayList,LinkedList,vector的区别

    1,Vector.ArrayList都是以类似数组的形式存储在内存中,LinkedList则以链表的形式进行存储. 2.List中的元素有序.允许有重复的元素,Set中的元素无序.不允许有重复元素. ...

  2. Hashtable,HashMap,TreeMap有什么区别?Vector,ArrayList,LinkedList有什么区别?int和Integer有什么区别?

    接着上篇继续更新. /*请尊重作者劳动成果,转载请标明原文链接:*/ /*https://www.cnblogs.com/jpcflyer/p/10759447.html* / 题目一:Hashtab ...

  3. ArrayList,LinkedList,Vector集合的认识

    最近在温习Java集合部分,花了三天时间读完了ArrayList与LinkedList以及Vector部分的源码.之前都是停留在简单使用ArrayList的API,读完源码看完不少文章后总算是对原理方 ...

  4. Java中的集合List、ArrayList、Vector、Stack(三)

    List接口 List集合代表一个有序集合,集合中每一个元素都有其对应的顺序索引.List集合容许使用重复元素,可以通过索引来访问指定位置的集合对象. ArrayList和Vector实现类 Arra ...

  5. 一、基础篇--1.2Java集合-ArrayList和Vector的区别

     ArrayList和Vector的区别 ArrayList和Vector都是基于动态数组实现的.  区别 ArrayList是非线程安全的,Vector是线程安全的. Vector的方法都加了同步锁 ...

  6. ArrayList和Vector的区别

    3.ArrayList和Vector的区别 答: 这两个类都实现了List接口(List接口继承了Collection接口),他们都是有序集合,即存储在这两个集合中的元素的位置都是有顺序的,相当于一种 ...

  7. ArrayList LinkedList Vector

    ArrayList是基于数组实现的,没有容量的限制. 在删除元素的时候,并不会减少数组的容量大小,可以调用ArrayList的trimeToSize()来缩小数组的容量. ArrayList, Lin ...

  8. ArrayList, LinkedList, Vector - dudu:史上最详解

    ArrayList, LinkedList, Vector - dudu:史上最详解 我们来比较一下ArrayList, LinkedLIst和Vector它们之间的区别.BZ的JDK版本是1.7.0 ...

  9. ArrayList和Vector的区别?HashMap和HashTable的区别?StringBuilder、StringBuffer和String的区别?

    ArrayList和Vector的区别?从两个方面 1.同步性:ArrayList是线程不安全的,是非同步的:Vector是线程安全的,是同步的.(Java中线程的同步也就满足了安全性) 2.数值增长 ...

随机推荐

  1. ACdream1157 Segments(CDQ分治 + 线段树)

    题目这么说的: 进行如下3种类型操作:1)D L R(1 <= L <= R <= 1000000000) 增加一条线段[L,R]2)C i (1-base) 删除第i条增加的线段, ...

  2. iOS之05-三大特性之封装

    本次主要学习面向对象的三大特性:封装.继承和多态中的封装 封装 1. 好处 降低耦合率 可重复调用类中的属性 提高安全性,外部不能随便修改变量的值,保证了数据的安全性 2. set方法 1.作用:提供 ...

  3. Google Chrome开发者工具

    Google Chrome开发者工具 是内嵌到浏览器的开发工具,打开方式有两种:第一“按F12”,第二:shift+ctrl+i(火狐.360等浏览器也可以这么用) Console介绍 Console ...

  4. DOM的概念及子节点类型

    前言 DOM的作用是将网页转为一个javascript对象,从而可以使用javascript对网页进行各种操作(比如增删内容).浏览器会根据DOM模型,将HTML文档解析成一系列的节点,再由这些节点组 ...

  5. HDU 3074 (线段树+模P乘法)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3074 题目大意:单点更新.维护序列乘法.mod 1000000007. 解题思路: 10000000 ...

  6. 将类似 12.56MB 36.89KB 转成 以K为单位的数字【备忘】

    select case RIGHT(RESOURCE_SIZE,2) when 'MB' THEN SUBSTRING_INDEX(RESOURCE_SIZE,'MB',1)*1024 ELSE SU ...

  7. Codeforces Round #251 (Div. 2) C. Devu and Partitioning of the Array

    注意p的边界情况,p为0,或者 p为k 奇数+偶数 = 奇数 奇数+奇数 = 偶数 #include <iostream> #include <vector> #include ...

  8. 一个动画 Label (走马观花)

    UILabel中一个水平移动的Label UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(10, 10, 300, 300)]; U ...

  9. Js:DOM对象操作常用的方法和属性

  10. C#注意事项及错误处理

    1 使用到config文件配置数据库路径 ConfigurationManager.ConnectionStrings["dbPath"].ConnectionString; db ...