一.概念:是为了实现某一目的或功能而预先提供的一系列封装好了的具有继承或实现的类与接口。

  二.特点:

    1.元素的类型可以不同  2.集合长度可变 3.空间不固定

  三.collection与collections的比较

1.collection是封装东西的核心接口,

    2.collections是操作集合的一个算法类。

  四.collection接口下包括有(list、set、map)三种集合

    1.list集合(包含Arraylist、linkedlist、vector)——————>列表

      ①特点:线性,即是有序;元素放入的顺序和元素存储的顺序保持一致,表象上list最大的特点就是有下标。

      ②:Arraylist与linkedlist的选用及Arraylist与vector的区别

        ②-①:Arraylist与linkedlist的选用

           Arraylist:就是作为一个数组的封装出现的底层就是一个数组(在需要多次遍历且需要做大量查询时的时候使用)。

           linkedlist:底层封装的是一个双向链表(当需要做大量的增、删特别是中间的增删时使用)。

        ②-②:Arraylist与vector的区别

          vector:在考虑线程安全时用它,用法和Arraylist一样。

      ③:使用Arraylist从增、删、改、查语法的使用:

        Arraylist  lst = new Arraylist();

        增:lst.add("hello");  lst.add(new Date());//可以放任何类型的数据

        改:lst.set(0,"world");//修改里面的数据时,需要给定下标和修改的数值

        删:lst.remove(0);//直接给定我们想要删除值的对应下标即可

        查:Date  now = (Date)lst.get(0);//由上面的增、改、删顺序下来,我们上面删除了下标为零的数据,则 lst.add(new Date());从下标1变成下标为0的数值

      ④:linkedlist的用法和Arraylist的增、删、改、查是一样的,只需要把上面的代码中的Arraylist换成linkedlist即可。

      ⑤:泛型——用来控制集合只能操作某一种数据类型时使用:

       例:

         linkedlist <String> lst = new  linkedlist <String>();//此时lst里就只能放String类型的数据了

      ⑥:遍历——将集合的每一个元素依次取出,做同样的操作:

        ⑥-1.使用普通for循环进行遍历

           for(int i = 0; i < lst.size(); i ++){

            System.out.println(lst.get(i).getDate());//接③中的Date

           }

        ⑥-2.使用迭代器——Iterator完成遍历(只能 list、set集合使用)

          例:

            Iterator  it = lst.interato();返回的是Object;//接③中的Date

            while (it.hasNext() ){

              Date  d = it.next();

              System.out.println(d.getDate());      

            }

          特点:没有下标,从头到尾走一遍

        ⑥-3.for—each循环——底层封装的就是迭代器但是语法更简单,还可以操作数组

          例:

            for(Date d: lst){

              System.out.println(d.getDate());//接③中的Date

            }

    2.set(包括Hashset、Treeset)——集

      ①特点:不能放置重复的元素,没有顺序;表象上set没有下标。

      ②:常用子类Hashset(如何判断两个元素是否重复呢?)    

        ②-1:调用equals方法得到两个对象比较为true。

        ②-2:两个元素的hashcode值保持一致

       注:只有这两个条件同时满足时,Java才认为这是同一对像,所有重写equals方法,一般也要重写hashcode方法,让equals返回true的对象,hashcode也能返回同样的整数值。

      ③:Hashset从增、删、改、查语法的使用:

        增:增加放置元素的方法与Arraylist的方法相同

        改:没有修改方法

        删:只能根据对象进行删除,还是用的equals和hashcode来判断到底删除哪一个对象。

        查:无法获取某一个指定的元素

      ④:遍历——将集合中的每一个元素一次取出,做同样的操作

        ④-1:不支持普通for循环,因为没有下标

        ④-2:支持迭代器

        ④-3:支持for—each循环

      注:遍历方法和Arraylist相同。

    3.Map(hashmap、properis)——映射

      ①特点:键值对,键要求唯一,值可以重复。(放入元素的顺序和存储顺序无关)

      ②常用子类:HashMap(主要用于集合操作);Properis(专用于操作属性文件)

      ③:HashMap的使用       

import com.lovo.bean.StudentBean;

public class TestMap {
public static void main(String[] args) {
HashMap<String, StudentBean> map = new HashMap<String, StudentBean>();
//增加元素
map.put("j34001", new StudentBean("zhang3",18,80));
map.put("j34002", new StudentBean("li4",28,85));
map.put("j34003", new StudentBean("wang5",18,87));
//得到长度
System.out.println(map.size());
//修改元素
map.put("j34003", new StudentBean("zhao6",24,75));
//删除元素---通过键去移除元素
map.remove("j34003");
//获取指定的元素对象
StudentBean stu = map.get("j34003");
//遍历Map
//不能同时遍历键和值;只能分开遍历
//遍历所有的键
Set<String> keySet = map.keySet();//得到所有的键,装入一个Set集合中,返回给调用者
for(String key : keySet){
System.out.println(key);
}
//遍历所有的值
Collection<StudentBean> allStus = map.values();//得到所有的值,思考为什么不返回List或其它集合类型?
for(StudentBean tmpStu : allStus){
System.out.println(tmpStu.getName());
}
}
}

      ④:Properis的使用     

package com.lovo.props;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Properties;
import java.util.Set;
public class TestProperties {
public static void main(String[] args) {
Properties props = new Properties();//首先产生Properties集合容器
props.setProperty("J134001", "chenGuo");//调用setProperty方法放入元素,每个元素都是一对键值对
props.setProperty("J134002", "李四");//第一个参数是键,要求不能重复
props.setProperty("J134003", "张三");//第二个参数是值
props.setProperty("J134003", "赵六");//如果出现放入重复值的情况,相当于修改而不是新增 String name = props.getProperty("J134001");//通过键取集合中的值,如果键不存在则返回null
System.out.println(name);
props.remove("J134002");//根据键删除整个键值对
System.out.println(props.getProperty("J134002"));
int size = props.size();//获得容器中的元素个数
//Properties操作的文件必须是固定格式的文本文件---属性文件---将是工作中使用率排名第二的配置文件
//存文件
// try {
// props.store(new FileOutputStream("file/student.properties"), "");
// } catch (FileNotFoundException e) // e.printStackTrace();
// } catch (IOException e) {// e.printStackTrace();
// } //读文件
Properties newProps = new Properties();
try {
newProps.load(new FileInputStream("file/student.properties"));
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println(newProps.getProperty("J134001"));
System.out.println(newProps.size()); } }

Java集合框架(JCF)之collention的更多相关文章

  1. Java集合框架(常用类) JCF

    Java集合框架(常用类) JCF 为了实现某一目的或功能而预先设计好一系列封装好的具有继承关系或实现关系类的接口: 集合的由来: 特点:元素类型可以不同,集合长度可变,空间不固定: 管理集合类和接口 ...

  2. Java集合框架介绍。Java Collection Frameworks = JCF

    Java集合框架 = Java Collection Frameworks  = JCF . 为了方便理解,我画了一张思维脑图.

  3. Java集合框架体系JCF

    Java 集合框架体系作为Java 中十分重要的一环, 在我们的日常开发中扮演者十分重要的角色, 那么什么是Java集合框架体系呢? 在Java语言中,Java语言的设计者对常用的数据结构和算法做了一 ...

  4. 《深入理解Java集合框架》系列文章

    Introduction 关于C++标准模板库(Standard Template Library, STL)的书籍和资料有很多,关于Java集合框架(Java Collections Framewo ...

  5. Java集合框架Collection

    转自:http://www.cdtarena.com/javapx/201306/8891.html [plain] view plaincopyprint?01.在 Java2中,有一套设计优良的接 ...

  6. Lambda表达式和Java集合框架

    本文github地址 前言 我们先从最熟悉的Java集合框架(Java Collections Framework, JCF)开始说起. 为引入Lambda表达式,Java8新增了java.util. ...

  7. java 集合框架(一)概述

    一.概述 Java Collection Framework (JCF) 提供给我们一系列的类和接口,方便开发者处理集合对象. 在Java 2之前,Java是没有完整的集合框架的.它只有一些简单的可以 ...

  8. 【集合系列】- 初探java集合框架图

    一.集合类简介 Java集合就像一种容器,可以把多个对象(实际上是对象的引用,但习惯上都称对象)"丢进"该容器中.从Java 5 增加了泛型以后,Java集合可以记住容器中对象的数 ...

  9. Java中的函数式编程(五)Java集合框架中的高阶函数

    写在前面 随着Java 8引入了函数式接口和lambda表达式,Java 8中的集合框架(Java Collections Framework, JCF)也增加相应的接口以适应函数式编程.   本文的 ...

随机推荐

  1. Android 使Volley完美支持自定义证书的Https

    其实在最早的版本里,Volley甚至是不支持https协议的,只能跑http,当然你也可以自己修改他的源码让他支持,如今volley的代码经过一些改进以后, 已经可以完美支持https协议了,无论是在 ...

  2. Android内存控制小技巧-使用矢量图来节省你的内存并简化你的开发。

    先上一个 位图和矢量图的 说明.http://zhidao.baidu.com/link?url=xwvs5CBzWeh15O3Ee4bICwCqg4PCQWwg5oZ0a6CVydbVZzufqrI ...

  3. unity, surface shader access world position and localposition

    一,surface shader中访问worldposition 在surface shader中访问世界坐标,只需在Input结构体中声明float3 worldPos即可,如下:  struct  ...

  4. Linux中重定向及管道

    1重定向1.1      重定向符号 >               输出重定向到一个文件或设备 覆盖原来的文件 >!              输出重定向到一个文件或设备 强制覆盖原来的 ...

  5. php 实现 jsonp 数据接口

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 3 ...

  6. Android adb shell命令大全

    1. 显示系统中全部Android平台: android list targets 2. 显示系统中全部AVD(模拟器): android list avd 3. 创建AVD(模拟器): androi ...

  7. Math.random();函数 随机数

    random函数参数 无参数 random函数返回值 返回0和1之间的伪随机数,可能为0,但总是小于1,[0,1) random函数示例 document.write(Math.random()); ...

  8. RESTful HTTP的实践

    REST是一种风格,而不是标准.因为既没有REST RFC,也没有REST协议规范或者类似的规定.REST架构是Roy Fielding(他也是HTTP和URI规范的主要作者之一)在一篇论文中描述的. ...

  9. bzoj1391 最大权闭合子图(also最小割、网络流)

    一道裸的最小割的题,写一下只是练练手. 表示被卡M,RE不开心.一道裸题至于吗? 再次复习一下最大权闭合子图: 1.每一个点若为正权,与源点连一条容量为绝对值权值的边.否则连向汇点一条容量为绝对值权值 ...

  10. linux系统中内存爆满之后会如何?

    在使用python写程序的时候,发现一个可以无限迭代的迭代器,从而可以直接将系统中的内存占满,那么占满之后会发生什么呢? 1. 创建无限迭代,生成列表,如下: [root@python ~]# pyt ...