数组与集合的区别:数组虽然也可以存储对象,但长度是固定的;集合的长度是可变的,数组中可以存储基本数据类型,集合只能存储对象。

集合特点:1、用于存储对象;

       2、长度可变;

3、可存储不同对象;

一、Collection

ArrayList<Object> list=new ArrayList<Object>();

    list.add("A");//添加对象A;

list.add(index,A);//在角标index位置上插入对象 A;

list.addAll( 集合); //在list里面加入集合;

list.clear();清除集合所有

boolean b=list.contain(a);返回指定角标的值(获取集合里的元素)

list.remove(a);删除角标为a的元素

list.is Empty;空集就返回true;

int index=list.indexOf(a);返回在集合里首次出现a的角标,没有就返回-1;

list.set(index,a);将指定元素a替代列表中角标为index的元素

list.size();集合里对象数

list.retainAll(list1);//取两个集合的交集,list里面只保留交集。

迭代器:

I    terator it = list1.iterator();

    system.out.println(it.next());// 返回一个元素,从第一个元素开始返回

    while(it.hasNext()){//获取迭代器,取出集合里面的元素

    System.out println(it.next)

}

反向迭代遍历集合里的元素:

  while(it.hasprevious()){

    System.out.println(it.previous);

}

Arraylist: 底层的数据结构使用的是数组

  特点:查询速度快,删减慢;

linkList:

linkList:底层链表数据结构

特点:删减快,查询速度慢。

LinkedList link  = new LinkedList();

addFirst();从前面开始添加

addlast();从后面开始添加元素

link.getFirst(); 获取第一个元素;如果没有元素会出现NoSuchElementException异常

link.getLast());获取最后一个元素

link.removeFirst()获取第一个元素并删除;如果没有元素会出现NoSuchElementException异常

link.removeLast();获取最后一个元素并删除

link.offerFirst()从前面开始添加
link.offerLast(); 从后面开始添加
获取元素,但不删除元素,如果集合中没有元素,会返回null
link.peekFirst();
link.peekLast();
 获取元素,但是元素被删除,如果集合中没有元素,会返回null
 link.pollFirst();

link.remove()//链表集合为空,抛出异常

link.poll()//链表集合为空,返回null;

collections.sort()按自然顺序排列

vector:

底层是数组数据结构。和ArrayList一样,区别:线程同步
枚举是vector特有的取出方式,不是通用的,已被取代;

Set接口:

Hashset:

是无序的,对于判断元素是否存在,以及删除等操作,依赖的方法是元素的hashCode和equals方法

TreeSet:

可以对Set集合里面进行排序; 底层数据是:二叉树,保证元素唯一行的依据。

public static void main(String[] args) {
    TreeSet<String> tr = new TreeSet<String>();

tr.add("cba");
    tr.add("abcd");
    tr.add("aaa");
    tr.add("bca");
    tr.add("Aca");
    Iterator<String> it = tr.iterator();
    while(it.hasNext()){    
        System.out.println(it.next());
    }
    //输出:
    //      Aca
    //      aaa
    //      abcd
    //      bca
    //      cba
}

排序的方式:让元素自身具备比较性,元素需要实现Comparable接口,覆盖compareTo方法。也称之为元素的自然顺序,或者也可以称之为默认顺序。

TreeSet集合的第二种比较方式

当元素自身不具备比较性时,或者具备的比较性不是所需要的,集合需要具备比较性。

public class MyCompare implements Comparator{
@Override
public int compare(Object o1, Object o2) {
    // TODO Auto-generated method stub
    Student s1 = (Student)o1;
    Student s2 = (Student)o2;
    int num = s1.getName().compareTo(s2.getName());//先比较名字
    if(num == 0){//如果名字相等
         if(s1.getAge() > s2.getAge()){//比较年龄
            return 1;
        }else if(s1.getAge() == s2.getAge()){
            return 0;
        }
        return -1;
    }
    return num;
}
}

public class TreeSetDemo {

public static void main(String[] args) {
    TreeSet<Student> tr = new TreeSet<Student>(new MyCompare());
    tr.add(new Student("zhangsan01",40));
    tr.add(new Student("zhangsan02",21));
    tr.add(new Student("zhangsan003",22));
   
   
    Iterator<Student> it = tr.iterator();
    while(it.hasNext()){
        Student stu = it.next();
        System.out.println(stu.getName()+"......"+stu.getAge());
    } 
    }
}

map

Map集合:该集合存储键值对,是一对一对的存储,注意:保证键值的唯一性。

put(K key, V value)\\添加

clear()清除

判断:containsValue(Object value)
containsKey(Object key)
isEmpty()

get(key) //
values()//

keySet()//获取KEY集合

Map的子集合

Hashtable:底层是哈希表数据结构,不可以存入null键null值。该集合是线程同步的。
HashMap:底层是哈希表数据结构,允许存入null键null值,该集合是不同步的。
TreeMap:底层是二叉树数据结构,线程不同步。可以用于给map集合里面的键进行排序。

map集合中两种取出方式:

1、keyset:将map中所有的键存入set集合,因为set具备迭代器,所以可以迭代方法取出所有的键,再根据get方法获取每一个键对应的值

HashMap<String,String> hm = new HashMap<String,String>();
   hm.put("01", "zhang1");
   hm.put("02", "zhang2");
   hm.put("03", "zhang3");
   hm.put("04", "zhang4");
    //先获取map集合的所有键的set集合,keyset()
    Set<String>  set = hm.keySet();
    //有了set集合就可以获取其迭代器
    Iterator<String>  it = set.iterator();

   while(it.hasNext()){
        String key = it.next();
        //有了键我们就可以通过map集合的get方法获取其对应的值
        String value = hm.get(key);
        System.out.println("key = "+key+"  value = "+value);
       
    }  
Map集合的取出原理:将map集合专程set集合,再通过迭代器取出

2、entrySet() :将map集合中的映射关系存入到了set集合中,而这个关系的数据类型就是Map.Entry.其实Entey也是一个接口,它事Map接口中的一个内部接口。

集合类Collection Map的更多相关文章

  1. 12. 集合类Collection和Map

    *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; } /* ...

  2. ios 对象的集合类(collection classes)

    当你着手为你的应用编写代码的时候,你会发现有许多可供使用的Objective-C的框架类,其中尤其重要的就是基础框架类,它为平台所有的应用提供基础服务.基础框架类中包括了表示字符串和数字等基本数据类型 ...

  3. Collection Map Java数据结构

    Collection Map 框架图 Collection          接口的接口   对象的集合 ├ List                   子接口      按进入先后有序保存   可 ...

  4. 第十节 集合类Collection和Map

    接口 Collection<E>  (E)代表类型 集合类: 与数组的异同: 数组:数组虽然也可以存储对象,但长度是固定的:集合的长度是可变的,数组中可以存储基本数据类型,集合只能存储对象 ...

  5. java 基础 --Collection(Map)

    Map是不是集合?哈哈哈 java编程思想>的第11章,第216页,正数第13行,中原文:“……其中基本的类型是LIst.Set.Queue和Map.这些对象类型也称为集合类,但由于Java类库 ...

  6. java的集合类【Map(映射)、List(列表)与Set(集)比较】

    https://baike.baidu.com/item/java%E9%9B%86%E5%90%88%E7%B1%BB/4758922?fr=aladdin https://www.cnblogs. ...

  7. 集合类——Collection、List、Set接口

    集合类 Java类集 我们知道数组最大的缺陷就是:长度固定.从jdk1.2开始为了解决数组长度固定的问题,就提供了动态对象数组实现框架--Java类集框架.Java集合类框架其实就是Java针对于数据 ...

  8. Java容器类接口:Iterator,Collection,Map

    Iterator Iterator被称为迭代器,是一个对象,它的工作是遍历并选择序列中的对象,可以实现以下一些操作: 使用方法iterator()要求容器返回一个Iterator,Iterator将返 ...

  9. 基础常用的数据结构 Collection Map

    map是键值对的集合接口,它的实现类主要包括:HashMap,TreeMap,Hashtable以及LinkedHashMap等.其中这四者的区别如下(简单介绍): HashMap:我们最常用的Map ...

随机推荐

  1. Oracle 11g数据库详解(2)

    FAILED_LOGIN_ATTEMPTS 用于指定连续登陆失败的最大次数 达到最大次数后,用户会被锁定,登陆时提示ORA-28000 UNLIMITED为不限制 精确无误差 是 实时 PASSWOR ...

  2. 关于c#继承

    如下代码所示:最后输出的是:8,3,7,4 public class A { public virtual void One(int i) { Console.Write(i); } public v ...

  3. Linux主从同步监测和利用sendMail来发邮件

    首先介绍下sendMail About SendEmailSendEmail is a lightweight, command line SMTP email client. If you have ...

  4. xlrd、xlwt操作execl表格

    在python中操作execl进行数据读写的时候,可以使用xlrd进行文件的读取,使用xlwt将数据写入execl中. 1.xlrd xlwt用来读取execl中的数据,常见的用法如下. (1)打开e ...

  5. Canvas:技术小结

    Canvas:技术小结 资料 [教程:MDN官方中文教程] https://developer.mozilla.org/zh-CN/docs/Web/API/Canvas_API/Tutorial [ ...

  6. Linux下代理服务器(proxy)配置

    Linux下有很多程序都只有命令行接口,对于这类程序,它们通过代理服务器(proxy)访问网络的方式也不尽相同.在本文中Easwy总结了一些常用Linux程序配置代理服务器的方法. [ 通用代理服务器 ...

  7. QT5.6.0 鼠标支持

    QT5用QPA换了QWS之后,USB鼠标就不知道怎么支持,网上搜啊搜,各种尝试,终于可以了. export TSLIB_ROOT=/mnt/sdcard/tslib export TSLIB_PLUG ...

  8. 【Head First Servlets and JSP】笔记

    1.谈到服务器的时候,可能是指物理主机(硬件),也可能是指Web服务应用(软件). 2.谈到客户的时候,通常指人类用户,或者是浏览器应用,或者两者都包括,浏览器应用做些什么?发送请求.解释HTML和呈 ...

  9. Python面试题之Python正则表达式指南

    1. 正则表达式基础 1.1. 简单介绍 正则表达式并不是Python的一部分.正则表达式是用于处理字符串的强大工具,拥有自己独特的语法以及一个独立的处理引擎,效率上可能不如str自带的方法,但功能十 ...

  10. Qt性能问题

    使用Qt库开发通信上位机软件,如串口.CAN总线等,涉及到接收界面高速刷新,会使CPU消耗率过高(20%以上),可能还会卡顿. 具体原因不知道,突然想放弃Qt了 ps: 1.问题出在界面刷新,会占据C ...