一、ArrayList

  解决了数组的局限性,最常见的容器类,ArrayList容器的容量capacity会随着对象的增加,自动增长。不会出现数组边界的问题。

package collection;
 
import java.util.ArrayList;
 
import charactor.Hero;
 
public class TestCollection {
    @SuppressWarnings("rawtypes")
    public static void main(String[] args) {
        //容器类ArrayList,用于存放对象
        ArrayList heros = new ArrayList();
        heros.add( new Hero("盖伦"));
        System.out.println(heros.size());
         
        //容器的容量"capacity"会随着对象的增加,自动增长
        //只需要不断往容器里增加英雄即可,不用担心会出现数组的边界问题。
        heros.add( new Hero("提莫"));
        System.out.println(heros.size());
         
    }
     
}

二、ArrayList常用方法

首先创建一个重写了toString的Hero类

package charactor;
  
public class Hero {
    public String name;
    public float hp;
  
    public int damage;
  
    public Hero() {
  
    }
  
    // 增加一个初始化name的构造方法
    public Hero(String name) {
  
        this.name = name;
    }
  
    // 重写toString方法
    public String toString() {
        return name;
    }
  
}

1、add

增加{1、直接add对象 hero.add(new Hero("demo")); 2、指定位置增加对象hero.add(3,"demo")}

package collection;
 
import java.util.ArrayList;
 
import charactor.Hero;
 
public class TestCollection {
    public static void main(String[] args) {
        ArrayList heros = new ArrayList();
 
        // 把5个对象加入到ArrayList中
        for (int i = 0; i < 5; i++) {
            heros.add(new Hero("hero " + i));
        }
        System.out.println(heros);
 
        // 在指定位置增加对象
        Hero specialHero = new Hero("special hero");
        heros.add(3, specialHero);
 
        System.out.println(heros.toString());
 
    }
 
}

2、contains():判断是否存在

3、get():获取指定位置的对象

4、indexOf():获取对象所处的位置

5、remove():删除

6、set():替换

7、size():获取大小

8、toArray():转换为数组

三、ArrayList和List

ArrayList实现了接口List,常见的写法会把引用声明为接口List类型

package collection;
  
import java.util.ArrayList;
import java.util.List;
 
import charactor.Hero;
  
public class TestCollection {
 
    public static void main(String[] args) {
        //ArrayList实现了接口List
         
        //常见的写法会把引用声明为接口List类型
        //注意:是java.util.List,而不是java.awt.List
        //接口引用指向子类对象(多态)
         
        List heros = new ArrayList();
        heros.add( new Hero("盖伦"));
        System.out.println(heros.size());
         
    }
      
}

四、ArrayList遍历的方法

1、使用for循环,通过获取ArrayList的size()来一一遍历

5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
package collection;
 
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
 
import charactor.Hero;
 
public class TestCollection {
 
    public static void main(String[] args) {
        List<Hero> heros = new ArrayList<Hero>();
 
        // 放5个Hero进入容器
        for (int i = 0; i < 5; i++) {
            heros.add(new Hero("hero name " + i));
        }
 
        // 第一种遍历 for循环
        System.out.println("--------for 循环-------");
        for (int i = 0; i < heros.size(); i++) {
            Hero h = heros.get(i);
            System.out.println(h);
        }
 
    }
 
}

2、使用迭代器Iterator进行遍历,迭代器每次都是从一个空的位置开始,通过hasNext()来判断,当返回false时表示后面没有数据了结束遍历,获取通过next()方法获取。

package collection;
 
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
 
import charactor.Hero;
  
public class TestCollection {
 
    public static void main(String[] args) {
        List<Hero> heros = new ArrayList<Hero>();
         
        //放5个Hero进入容器
        for (int i = 0; i < 5; i++) {
            heros.add(new Hero("hero name " +i));
        }
         
        //第二种遍历,使用迭代器
        System.out.println("--------使用while的iterator-------");
        Iterator<Hero> it= heros.iterator();
        //从最开始的位置判断"下一个"位置是否有数据
        //如果有就通过next取出来,并且把指针向下移动
        //直达"下一个"位置没有数据
        while(it.hasNext()){
            Hero h = it.next();
            System.out.println(h);
        }
        //迭代器的for写法
        System.out.println("--------使用for的iterator-------");
        for (Iterator<Hero> iterator = heros.iterator(); iterator.hasNext();) {
            Hero hero = (Hero) iterator.next();
            System.out.println(hero);
        }
         
    }
      
}

3、常用的for循环遍历.

不能进行ArrayList初始化,也不知道到底多少个元素在ArrayList,就是所有遍历出来

五、ArrayList和LinkedList的区别

ArrayList:顺序结构,插入,删除数据很慢(O(N)),查找快(O(1)),就类似于数组,跟链表的关系一样。

LinkedList:链表结构,插入,删除数据快(O(1)),查找慢(O(N))。

六、ArrayList和HashSet区别

最大区别在于:

1、是否有顺序:

ArrayList:有顺序

HashSet:无顺序(集合的无序性),它的具体顺序既不是按照hashcode的顺序,也不是按照插入顺序,根据在JVM的不用版本中,看到的顺序也是不同的,HashSet的顺序本身不稳定的。

2、是否重复

List中的数据可以重复

Set中的数据不能重复

重复判断的标准是:首先看hashcode是否相同,不同,则肯定是不同数据

如果相同,在比较equals,如果equals相同,则是相同数据,否则是不同数据。

七、HashSet,LinkedHashSet,TreeSet比较

HashSet:无顺序

LinkedHashSet:按照插入顺序

TreeSet:从小到大顺序

package collection;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.TreeSet; public class TestCollection{
public static void main(String[] args){
HashSet<Integer> hashSet=new HashSet<Integer>();
//HashSet中的数据不是按照插入顺序存放
hashSet.add(22);
hashSet.add(33);
hashSet.add(55);
System.out.println(hashSet); LinkedHashSet<Integer> linkedHashSet=new LinkedHashSet<Integer>();
//LinkedHashSet中的数据按照插入顺序存放
linkedHashSet.add(22);
linkedHashSet.add(56);
linkedHashSet.add(28);
System.out.println(linkedHashSet);//22,56,28 TreeSet<Integer> treeSet=new TreeSet<Integer>();
//TreeSet中的数据是进行了排序的从小到大
treeSet.add(22);
treeSet.add(56);
treeSet.add(28);
System.out.println(treeSet);//22,28,56
}
}

一、集合框架(关于ArrayList,LinkedList,HashSet,LinkedHashSet,TreeSet)的更多相关文章

  1. Java——集合框架之ArrayList,LinkedList,迭代器Iterator

    概述--集合框架 Java语言的设计者对常用的数据结构和算法做了一些规范(接口)和实现(具体实现接口的类).所有抽象出来的数据结构和操作(算法)统称为Java集合框架(Java Collection ...

  2. 安卓 ArrayList,LinkedList,HashSet,Vector,TreeSet的区别和使用

    java的集合就那么几种 总体为:List,Set,Map (都是接口由其子类去实现具体的方法) ArrayList,LinkedList,Vector都属于List List:元素是有顺序的,元素可 ...

  3. java集合框架之几种set(HashSet LinkedHashSet TreeSet )

    参考http://how2j.cn/k/collection/collection-sets/691.html#nowhere HashSet LinkedHashSet TreeSet HashSe ...

  4. Java集合框架之ArrayList浅析

    Java集合框架之ArrayList浅析 一.ArrayList综述: 位于java.util包下的ArrayList是java集合框架的重要成员,它就是传说中的动态数组,用MSDN中的说法,就是Ar ...

  5. Java基础---集合框架---迭代器、ListIterator、Vector中枚举、LinkedList、ArrayList、HashSet、TreeSet、二叉树、Comparator

    为什么出现集合类? 面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,就对对象进行存储,集合就是存储对象最常用的一种方式. 数组和集合类同是容器,有何不同? 数组虽然也可以存储对 ...

  6. Java集合框架(二)—— HashSet、LinkedHashSet、TreeSet和EnumSet

    Set接口 前面已经简绍过Set集合,它类似于一个罐子,一旦把对象'丢进'Set集合,集合里多个对象之间没有明显的顺序.Set集合与Collection基本上完全一样,它没有提供任何额外的方法. Se ...

  7. Arraylist 和 linkedlist || hashset 和treeset. || hashMap 和 TreeMap

    参考:http://liuyuan418921673.iteye.com/blog/2256120 1. ArrayList和LinkedList的区别和使用场景   ArryList 与linked ...

  8. 【转】Java如何克隆集合——深度拷贝ArrayList和HashSet

    原文网址:http://blog.csdn.net/cool_sti/article/details/21658521 原英文链接:http://javarevisited.blogspot.hk/2 ...

  9. Java集合详解7:HashSet,TreeSet与LinkedHashSet

    今天我们来探索一下HashSet,TreeSet与LinkedHashSet的基本原理与源码实现,由于这三个set都是基于之前文章的三个map进行实现的,所以推荐大家先看一下前面有关map的文章,结合 ...

  10. HashSet,LinkedHashSet,TreeSet的区别

    Set接口Set不允许包含相同的元素,如果试图把两个相同元素加入同一个集合中,add方法返回false.Set判断两个对象相同不是使用==运算符,而是根据equals方法.也就是说,只要两个对象用eq ...

随机推荐

  1. 【译】第16节---数据注解-Table

    原文:http://www.entityframeworktutorial.net/code-first/table-dataannotations-attribute-in-code-first.a ...

  2. SE91 SAP消息类型

    SE91 SAP消息类型 E:Error W:Warning I  :Information A :Abortion S :Success 标准 : MESSAGE ID sy-msgid TYPE  ...

  3. Shell 脚本批量创建数据库表

    使用 Shell 脚本批量创建数据表 系统:Centos6.5 64位 MySQL版本:5.1.73 比如下面这个脚本: #!/bin/bash #批量新建数据表 for y in {0..199}; ...

  4. webpack插件配置(二)- HtmlWebpackPlugin

    作用 简化Html文件的创建,以便为你的webpack bundle包提供服务.这对于在文件名中包含每次会随着编译而发生变化的hash的webpack bundle尤其有用.插件可以生成一个HTML文 ...

  5. [luogu]P1852跳跳棋

    题目重点是每次不能跳过两个棋子 即对于每一个棋子的状态(a,b,c) (a<b<c) 最多有两种移动的方式 1.中间往两边跳 (a,b,c)-->(2b-a,a,c)或(a,c,2b ...

  6. Java 字符串常用操作(String类)

    字符串查找 String提供了两种查找字符串的方法,即indexOf与lastIndexOf方法. 1.indexOf(String s) 该方法用于返回参数字符串s在指定字符串中首次出现的索引位置, ...

  7. 【Java】【存储&作用域】

    [存储] 1. 寄存器.这是最快的保存群裕,因为它位于和其他所有保存方式不同的地方:处理器内部.然而,寄存器的数量有限,所以寄存器是根据需要由编译器分配.我们对此没有直接的控制权,也不可能在自己的程序 ...

  8. URL helper 逆向破解思路+详细过程 利用messagebox破解

    先了解一下软件的运行: 打开后是这样的,要注册 随便输入假注册码,看他怎么响应: 会弹出一个信息窗(massageBox)提示注册失败.到这里就行了,关掉,然后用OD打开,按F9跑起来: 这里输入假码 ...

  9. numpy函数

    a=np.array([1,2,3,4,5,6]) a=a.reshape([2,-1])      # -1:表示3,此处将a数组设置为2行3列 a[1,2]=66  # 把a的6改成66 a=np ...

  10. MySQL学习(二)

    1 增删改查是针对表来说的. 2 创建一个表 mysql> create table stu( -> id int primary key auto_increment, -> sn ...