一、集合框架

1.特点

  对象封装数据,对象多了也需要存储,集合用于存储对象。

  对象的个数确定可以使用数组,但是不确定的话,可以用集合,因为集合是可变长度的。

2.集合和数组的区别

  数组是固定长度的,集合是可变长度的。

  数组可以存储基本数据类型,也可以存储引用数据类型;集合只能存储引用数据类型。

  数组存储的元素必须是同一个数据类型;集合存储的对象可以是不同的数据类型。

3.数据结构

  对于集合容器,有很多种。因为每一个容器的自身特点不同,其实原理在于每个容器内部的数据结构不同,集合容器在不断向上的抽取过程中。出现了集合体系。

二、Collection接口

1.List :有序(元素的存取顺序没有变化),元素都有索引,元素可以重复。

2.Set :无序,不能存储重复的元素,存储的元素唯一。

3.Collection接口中的方法

  添加:

  add(object):添加一个元素

  addAll(Collection):添加一个集合

  删除:

  clear():清空集合,集合元素全部删除。

  remove(obj):删除单个元素。

  removeAll(collection):删除部分元素,就是删除指定的子集合。

  判断:

  boolean contains(obj):判断是否包含一个元素。

  boolean contains(collection):判断是否包含一个集合。

  boolean isEmpty();集合判空。

  获取:

  int size():返回元素个数。

  取交集:

  boolean retainAll(collection):A.retainAll(B);AB取交集。如果A集合有变动,一般元素会变少,如果没有发生变化,也就是集合AB元素相同,返回值为false;否则返回true;

  获取集合中所有元素:

  Iterator iterator():迭代器

  将集合变成数组:

  toArray();

三、Iterator接口:

  boolean hasNext(),迭代条件,判空条件。

  E next(),返回迭代的下一个元素。

  void remove()从迭代器指向的collection中移除迭代器返回的最后一个元素。

  public static void main(String[] args){

  Collection coll = new ArrayList();

  coll.add("abc0");

  coll.add("abc1");

  coll.add("abc2");

  iterator it = coll.iterator();

  while(it.hasNext()){

  Syso(it.next());

}

}

  for(Iterator it = coll.iterator();it.hasNext();){

    Syso(it.next());

}

四、list接口

1.

List本身是Collection接口的子接口,具备了Collection的所有方法。现在学习List体系特有的共性方法,查阅方法发现List的特有方法都有索引,这是该集合最大的特点。

2.

list:有序(元素存入集合的顺序和取出的顺序一致)。元素都有索引并可以存在重复。

  ArrayList:底层的数据结构是数组,线程不同步,ArrayList替代Vector,查询元素的速度非常快。

  LinkedList:底层的数据结构是链表,线程不同步,增删元素的速度非常快。

  Vector:底层的数据结构就是数组,线程同步的,Vector无论查询和增删都比较慢。

  添加:

  add(index,element):在指定索引位置插入元素。

  addAll(index,collection):在指定索引位置插入一个集合。

  删除:

  remove(index):删除指定索引位置的元素。返回被删的元素。

  获取:

  Object get(index):返回指定位置的元素。

  int indexOf(obj):获取指定元素第一次出现的位置,元素不存在的话返回-1;

  int lastIndexOf(obj):返回指定元素最后出现的位置。

  List subList(start,end):获取子列表。

  修改:

  set(index,element):对指定索引进行元素的修改。

  获取所有元素:

  ListIterator listIterator():list集合特有的迭代器。

2.1

ListIterator是Iterator的子接口,是List特有的迭代器

ListIterator IT= list.listiterator;

 

 

add(E e) 将指定的元素插入列表(可选操作)。

 boolean

hasNext() 以正向遍历列表时,如果列表迭代器有多个元素,则返回 true(换句话说,如果 next 返回一个元素而不是抛出异常,则返回 true)。

 boolean

hasPrevious() 如果以逆向遍历列表,列表迭代器有多个元素,则返回 true

 E

next() 返回列表中的下一个元素。

 int

nextIndex() 返回对 next 的后续调用所返回元素的索引。

 E

previous() 返回列表中的前一个元素。

 int

previousIndex() 返回对 previous 的后续调用所返回元素的索引。

 void

remove() 从列表中移除由 nextprevious 返回的最后一个元素(可选操作)。

 void

set(E e) 用指定元素替换 nextprevious 返回的最后一个元素(可选操作)。

2.2

LinkedList:的特有方法

addFirst();addLast();

在jdk1.6后有OfferFirst();offerlast();

getFirst():获取链表中的第一个元素。getLast();获取链表中的最后一个元素。

在jdk1.6后有peekFirst();和peekLast();

removeFirst()/removeLast(),删除并返回头尾元素。

在jdk1.6后有pollFirst()/pollLast();

五、Set接口

Set接口中方法和Collection中方法一致的,Set接口去除方式只有一种,迭代器。

1.

  HashSet:底层数据结构是哈希表,线程是不同步的。无序,高效。

  HashSet集合保证元素唯一性:通过元素的hashCode方法,和equals方法完成的,当元素的hashCode值相同时,才继续判断元素的equals是否为true;如果hashCode值不同,那么不判断equals,从而提高对象比较的速度。

  LinkedHashSet:有序,hashset的子类。

  TreeSet:对Set集合中的元素的进行指定顺序的排序。不同步,TreeSet底层的数据结构就是二叉树。

2、哈希表的原理:

  对对象元素中的关键字(对象中的特有数据),进行哈希算法的运算,并得出一个具体的算法值,这个值 称为哈希值

  哈希值就是这个元素的位置。

  如果哈希值出现冲突,再次判断这个关键字对应的对象是否相同。如果对象相同,就不存储,因为元素重复。如果对象不同,就存储,在原来对象的哈希值基础+1顺延。

  存储哈希值的结构,我们称为哈希表。

  既然哈希表是根据哈希值存储的,为了提高效率,最好保证对象的关键字是唯一的。

这样可以尽量少的判断关键字对应的对象是否相同,提高了哈希表的操作效率。

对于ArrayList集合,判断元素是否存在,或者删元素底层依据都是equals方法。

对于HashSet集合,判断元素是否存在,或者删除元素,底层依据的是hashCode和equals方法。

3.TreeSet

   用于对Set集合进行元素的指定顺序排序,排序需要依据元素自身具备的比较性。  如果元素不具备比较性,在运行时会发生ClassCastException异常。  所以需要元素实现Comparable接口,强制让元素具备比较性,复写compareTo方法。  依据compareTo方法的返回值,确定元素在TreeSet数据结构中的位置  TreeSet方法保证元素唯一性的方式:就是参考比较方法的结果是否为0,如果return 0,视为    两个对象重复,不存。

  在进行比较时,如果判断元素不唯一,比如,同姓名,同年龄,才视为同一个人。

在判断时,需要分主要条件和次要条件,当主要条件相同时,再判断次要条件,按照次要条件排序。

六、Map集合

1.

Hashtable:底层是哈希表数据结构,是线程同步的。不可以存储null键,null值。

HashMap:底层也是哈希表数据结构,是线程不同步的,可以存储null键,null值。

TreeMap:底层是二叉树结构,可以对map集合中的键进行指定顺序的排序。

2.

  添加

  put(key,value):当存储的键相同时,新的值会替换老的值,并将老值返回,如果键没有重复,返回null;

  void putAll(map);

  删除

  void clear():清空

  value remove(key):删除指定键

  判断

  boolean isEmpty();

  boolean containKey(key);是否包含键

  boolean containValue(value):是否包含value

  取出

  int size():返回长度。

  get(key):通过指定键获取对应的值,如果返回null,可以判断该键不存在,也有可能是该key所对应的value就是null

  collection values():获取map集合中所有的值。

3.

  获取map中的所有元素:

原理:map中是没有迭代器的,collection具备迭代器,只要将map集合转成Set集合,可以使用迭代器了。之所以转成set,是因为map集合具备着键的唯一性,其实set集合就来自于map,set集合底层其实用的就是map的方法。

3.1

 可以将map集合中键都取出存放到set集合中。对set集合进行迭代。迭代完成,再通过get方法获得对应键的值。

  Set keyset = map.keySet();

  Iterator it = keySet.iterator();

  while(it.hasNext()){

  Object key = it.next();

  Object value = map.get(key);

  SOP(key+":"+value);

}

3.2

  通过map.entrySet()方法,获得entrySet集合,并获得entry关系集合。

  Set entrySet = map.entrySet();

  Iterator it = entrySet.iterator();

  while(it.hasNext){

  Map.Entry me = (Map.Entry)it.next();

  SOP(me.getKey()+":"+me.getValue());

}

七、Collections和Arrays

  1.

  静态对象,

  Collections.sort(lsit);//对list集合进行自然顺序排序。

  Collections.sort(list,newComparatorByLen());//按指定的比较器方法排序。

    classComparatoByLen implements Comparator<String>{

    public int compare(String s1,String s2){

    int temp = s1.length()-s2.length();

    return temp == 0?s1.compareTo(s2):temp;

  }

  }

  Collections.max(list);//返回list中字典顺序最大的元素。

  int index = Collections.bianry.Search(list,"zz");//二分查找,返回角标

  Collections.reverseOrder();//逆向反转排序

  Collections.shuffle(list);//随机对list中的元素进行位置的置换。

  2.

  定义一个类,将集合所有方法加同一把锁。

  Collections中的XXXSynchronizedxxx(xxx);

  ListsynchronizedList(list);

  MapsynchronizedMap(map);

  3.

  Collections是个java.util下的类,是针对集合类的一个工具类,提供一系列静态方法,实现对集合的查找、排序、替换、线程安全化(将非同步的集合转换成同步的)等操作。

  Collection是个java.util下的接口,它是各种集合结构的父接口,继承于它的接口主要有Set和List,提供了关于集合的一些操作,如插入、删除、判断一个元素是否其成员、遍历等

  Arrays

  用于操作数组对象的工具类,里面都是静态方法。

  asList方法:将数组转换成lsit集合

  String[] arr = {"abc","kk","qq"};

  List<String>list = Arrays.asList(arr);

  可以通过list集合中的方法来操作数组中的元素:isEmpty()、contains、indexOf、set;

   
   
   
   
   
   
   
   
   

System.out.println(i1);

javaSE集合---进度2的更多相关文章

  1. javase集合 温故而知新

    复习javase集合 1.为什么要有集合? 数组长度需要在初始化时确定大小,数据结构单一.因此集合出现了 2.数组和集合的区别 区别一:数组既可以存储基本数据类型,又可以存储引用类型,集合只能存储引用 ...

  2. JavaSE集合(十)之Map

    前面给大家介绍了集合家族中的Collection家族,这一篇给大家分享的是集合中的另一个家族就是Map家族.以前的时候学习Map的时候没有很认真的去学习,我觉得很多东西还是不是很清楚. 这次我将总结的 ...

  3. JavaSE集合(八)之Map

    前面给大家介绍了集合家族中的Collection家族,这一篇给大家分享的是集合中的另一个家族就是Map家族.以前的时候学习Map的时候没有很认真的去学习,我觉得很多东西还是不是很清楚. 这次我将总结的 ...

  4. JavaSE集合基础总览

    Java集合 Java集合,也称之为容器.基本上你写所有的Java程序,都必须要用到一个包.该API基本都位于java.util工具类包中,是JavaSE中的重中之重.简单可以总结为“1136”,分别 ...

  5. java集合——进度1

    集合类的由来:    对象用于封装特有数据,对象多了需要存储,如果对象的个数不确定.    就使用集合容器进行存储.    集合特点:1,用于存储对象的容器.2,集合的长度是可变的.3,集合中不可以存 ...

  6. JavaSE| 集合

    集合 l  Collection 层次结构中的根接口.Collection 表示一组对象,这些对象也称为 collection 的元素.一些 collection 允许有重复的元素,而另一些则不允许. ...

  7. JavaSE 初学进度条JProgressBar

    预备知识 创建进度条类后将其直接加入JFrame看看效果 public class JProgressBarDemo2 { public static void main(String args[]) ...

  8. JavaSE 集合概述

    1.对象的存储: 数组(基本数据类型 & 引用数据类型) 集合(引用数据类型) 2.集合框架 Collection 接口: 方法: iterator().toArray();  迭代器遍历集合 ...

  9. [javaSE] 集合框架(体系概述)

    为什么出现集合类 为了方便对多个对象的操作,对对象进行存储,集合就是存储对象最常用的一种方式 数组和集合的不同 数组是固定长度的,集合是可变长度的 数组可以存储基本数据类型,集合只能存储对象 数组只能 ...

随机推荐

  1. 【转载】C#使用as关键字将对象转换为指定类型

    在C#的编程开发过程中,很多时候涉及到数据类型的转换,可使用强制转换的方式,不过强制转换数据类型有时候会抛出程序异常错误,可以使用as关键字来进行类型的转换,如果转换成功将返回转换后的对象,如果转换不 ...

  2. 使用node建立本地服务器访问静态文件

    最终目录结构 demo │ node_modules └───public │ │ index.html │ │ index.css │ └───index.js └───server.js 一.使用 ...

  3. 消息队列与RPC的区别

    一. 区别 1.消息队列能够积压消息,让消费者可以按照自己的节奏处理消息,但是RPC不能. 2.消息队列是一个异步的过程(生产者发送消息之后,不会等待消息的处理),RPC是一个同步的过程. 3.消息队 ...

  4. DbTemplate

    package com.me.dbComponent; import java.sql.Connection; import java.sql.PreparedStatement; import ja ...

  5. 【DRF框架】序列化组件——字段验证

    单个字段的验证 1.在序列化器里定义校验字段的钩子方法   validate_字段 2.获取字段的数据 3.验证不通过,抛出异常  raise serializers.ValidationError( ...

  6. web server

    嵌入式的:boa  thttpd wn 网站的: iis apache tomcat ngnix python 的  ruby的 自定的 windows  w3mfc c#自定义的1对1 webser ...

  7. 0017SpringBoot注册Servlet三大组件(Servlet、Filter、Listener)

    由于SpringBoot默认是以jar包的形式启动嵌入式servlet容器来启动SpringBoot的web应用,所以没有web.xml文件,那么如何配置Servlet.Filter.Listener ...

  8. Android上执行python脚本-QPython

    看书,发现android可以跑python. 尝试了一下. 首先需要在手机上安装python环境,通过安装apk实现,这个apk叫QPython,还有同类的比如SL4A. QPython的官网:htt ...

  9. python练习题(二)

    题目: 已知以下几期双色球号码(最后一个数字为蓝球), 2019080 03 06 08 20 24 32 07 2019079 01 03 06 09 19 31 16 2019078 01 17 ...

  10. 负载均衡集群(LBC)

    一.LVS简介及工作模式1. LVS简介Linux Virtual Server,该软件的功能是实现LB(load balance) 2.LVS的三种工作模式 1)NAT模式(NAT) LVS 服务器 ...