背景:

       因为对Java的集合完全不了解,所以才在网上找了找能形成初步印象的文章进行学习,大多涉及的是一些概念和基础知识。

一、数组array和集合的区别:

(1)数组是大小固定的,并且同一个数组只能存放类型一样的数据(基本类型/引用类型)

(2)JAVA集合可以存储和操作数目不固定的一组数据。
(3)若程序时不知道究竟需要多少对象,需要在空间不足时自动扩增容量,则需要使用容器类库,array不适用。联系:使用相应的toArray()和Arrays.asList()方法可以互相转换。

二、集合的体系结构:

(1)List、Set、Map是这个集合体系中最主要的三个接口。 List和Set继承自Collection接口。 Map也属于集合系统,但和Collection接口不同。
(2)List有序且允许元素重复。ArrayList、LinkedList和Vector是三个主要的实现类。 ArrayList 是线程不安全的, Vector 是线程安全的,这两个类底层都是由数组实现的 LinkedList 是线程不安全的,底层是由链表实现的。
(3)Set不允许元素重复。HashSet和TreeSet是两个主要的实现类。Set 只能通过游标来取值,并且值是不能重复的。
(4)Map 是键值对集合。其中key列就是一个集合,key不能重复,但是value可以重复。 HashMap、TreeMap和Hashtable是Map的三个主要的实现类。 HashTable 是线程安全的,不能存储 null 值 HashMap 不是线程安全的,可以存储 null 值。

三、各个接口实现类的插入和遍历数据的方法

(1)List接口之ArrayList实现类
  

package com.test.List;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class ListTest {

    public static void main(String[] args) {
        List list=new ArrayList<>();
        list.add(0, "a");
        list.add(1, "b");
        list.add(2, "c");
        list.add(3, "d");

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

        for (Object object : list) {
            System.out.println(object);
        }
    }

}
(2)Set接口之HashSet实现类
  

package com.test.List;

import java.util.HashSet;

public class SetTest {

    public static void main(String[] args) {
        // TODO 自动生成的方法存根

        HashSet<String> hSet=new HashSet<>();
        hSet.add("你好");
        hSet.add("我在学集合");
        hSet.add("哦,学的怎么样了");
        hSet.add("听难的");
        hSet.add("没事,加油");
        hSet.add("恩,好的,谢谢");

        for (String string : hSet) {
            System.out.println(string);
        }
    }

}
 
(3)Map接口之TreeMap实现类
  

package com.test.List;

import java.util.Iterator;
import java.util.Set;
import java.util.TreeMap;

public class User {

    private int id;
    private String name;
    private String address;

    public User(int id,String name,String address) {
        this.id=id;
        this.name=name;
        this.address=address;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

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

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public static void main(String[] args) {
        TreeMap<Integer, User> map=new TreeMap<Integer,User>();
        map.put(1, new User(1,"小红","北京"));
        map.put(2, new User(2,"小蓝","广州"));
        map.put(3, new User(4,"小东","深圳"));
        map.put(4, new User(5,"小白","上海"));
        //返回此映射所包含的键的视图
        Set<Integer> keySet=map.keySet();
        /*Iterator<Integer> i=keySet.iterator();
        while (i.hasNext()) {
            System.out.println(map.get(i.next()));
        }*/
        //foreach是迭代器的简便写法
        for (Integer integer : keySet) {
            User user=map.get(integer);
            System.out.println(user.getId()+";"+user.getName()+";"+user.getAddress());
        }
    }
}

总结:

 
    (1)因为数组长度是固定的,且只能存储单一类型的数据,而集合突破了这两种限制,可以说集合是数组的一种拓展;
    (2)Java的集合接口分为3大类,List、Set及Map,List是有序可重复性的,Set是无序不可重复的,Map存储的是一组键值对;
    (3)感觉学一个新的知识点,就应该先了解它最重要的功能,然后从最重要的功能开始学起。集合最重要的就是充当容器,也就是存储的功能,所以关于往集合里加入数据和遍历数据的方法是最开始要了解的。
    (4)List和Set加入数据都是用add()方法,Map加入数据用的是put();
    (5)遍历:三者都可以用迭代器,即iterator,或者用foreach循环。

Java集合初体验的更多相关文章

  1. JAVA 11初体验

    JAVA 11初体验 随着JAVA没半年发布一次新版本,前几天JAVA 11隆重登场.在JAVA 11中,增加了一些新的特性和api, 同时也删除了一些特性和api,还有一些性能和垃圾回收的改进. 作 ...

  2. JAVA多线程-初体验

    一.线程和进程 每个正在系统上运行的程序都是一个进程.每个进程包含一到多个线程. 进程是所有线程的集合,每一个线程是进程中的一条执行路径. 二.为什么使用多线程,哪些场景下使用 多线程的好处是提高程序 ...

  3. Java爬虫初体验

    年关将近,工作上该完成的都差不多了,上午闲着就接触学习了一下爬虫,抽空还把正则表达式复习了,Java的Regex和JS上还是有区别的,JS上的"\w"Java得写成"\\ ...

  4. java学习初体验之课后习题

    import java.util.Scanner; public class HelloWorld { public static void main(String[] args) { //打印Hel ...

  5. Java单元测试初体验(JUnit4)

    什么是单元测试 我们在编写大型程序的时候,需要写成千上万个方法或函数,这些函数的功能可能很强大,但我们在程序中只用到该函数的一小部分功能,并且经过调试可以确定,这一小部分功能是正确的.但是,我们同时应 ...

  6. java activemq初体验

    1.下载安装ActiveMQ ActiveMQ官网下载地址:http://activemq.apache.org/download.html ActiveMQ 提供了Windows 和Linux.Un ...

  7. java学习初体验NO.1

    一.学习目标: 1.理解Java编译原理 在Java编程语言中,所以源代码首先以用.Java扩展名结尾的纯文本件编写,然后,编译器将这些源文件编译成.Class文件.然后,Java启动器工具使用Jav ...

  8. java程序初体验

    示例代码 class Demo { public static void main(String[] args) { System.out.print("hello world") ...

  9. JAVA的初体验

    jdk的地址:https://www.oracle.com/technetwork/java/javase/downloads/index.html 第一步:找到相应的JAVA SE版本,点击down ...

随机推荐

  1. 利用connect建立前端开发服务器

    利用connect建立前端开发服务器 对于前后端完全分离的系统,开发时候我们需要给前端配置服务器,当然我们可以选择Nginx之类的服务器进行配置,但我们也能使用NodeJS构建高自由度的前端开发服务器 ...

  2. 免费的Visual Studio的插件

    在做了深入(的)研究之后(通过在google网站搜索),,我编译了15个免费Visual Studio 2005插件表..其中一些插件将提高您(的)代码(的)质量,,另外一些能使您编译(的)更快,,但 ...

  3. PostgreSQL数据的导出导入 save your data!

    PostgreSQL数据的导出导入 导出PostgreSQL数据库中的数据: $ pg_dump -U postgres  -f mydatabase.sql  mydatabase 导入数据时首先创 ...

  4. mysql 建表 AUTO_INCREMENT , 数据类型 VARCHAR

    建表: 原帖地址: http://blog.sina.com.cn/s/blog_5da3d5c50100bjh0.html MySQL AUTO_INCREMENT 简介 (2009-01-02 1 ...

  5. enode框架step by step之框架要实现的目标的分析思路剖析1

    enode框架step by step之框架要实现的目标的分析思路剖析1 enode框架系列step by step文章系列索引: 分享一个基于DDD以及事件驱动架构(EDA)的应用开发框架enode ...

  6. 基于内容的图片检索CBIR(Content Based Image Retrieval)简介

    传统的图像检索过程,先通过人工对图像进行文字标注,再利用关键字来检索图像,这种依据图像描述的字符匹配程度提供检索结果的方法,简称“以字找图”,既耗时又主观多义.基于内容的图像检索客服“以字找图”方式的 ...

  7. java中outer的使用

    outer多用于嵌套循环的情况 outer: for (int i = 2 ; i <= 10 ; i++) { for (int j = 2 ; j <=10 ; j++) { if(i ...

  8. Fragment与Activity交互(使用接口)

    在Fragment中: 1. // 定义一个回调接口,该Fragment所在Activity需要实现该接口// 该Fragment将通过该接口与它所在的Activity交互 { public void ...

  9. MySQL索引方法

    MySQL目前主要有以下几种索引方法:B-Tree,Hash,R-Tree. 一.B-Tree B-Tree是最常见的索引类型,所有值(被索引的列)都是排过序的,每个叶节点到跟节点距离相等.所以B-T ...

  10. C语言递归回溯法迷宫求解

    本例将随机产生一个10*10的迷宫输出后,在下面输出此迷宫的解法. 解法为从坐标(1,1)处进入,从(8,8,)出去,优先线路为先右后下再上最后为左. 不少人求解此题时运用的栈的相关知识,本例寻找线路 ...