数组类Array是java中最基本的一个存储结构,它用于存储

一组连续的对象或一组类型相同的基本类型的数据。

Array特点:效率高,但容量固定且无法动态改变,

缺点:无法判断其中存有多少元素,length只是告诉我们Array的容量.

Arrays类: 专门用来操作Array,提供搜索,排序,复制等

静态方法.

Arrays中equals():比较两个Array是否相等,Array拥有相同元素个数,且所有对应元素两两相等.

fill():将值填入Array中.

sort():用来对Array进行排序.

binarySearch():在排好序的Array中寻找元素.

System.arraycopy():Array的复制.

Vector:基于Array的List,性能也就不可能超越Array,并且Vector

是“sychronizend”的,这个也是Vector和ArrayList的唯一区别.

ArrayList:同Vector一样是一个基于Array的,但不同的是ArrayList

不是同步的.所以在性能上要比Vector优越一些,但是运行到多线程环境

中时,需要自己管理线程的同步问题.从其命名中可以看出它是一种类似数组的形式进行存储,因此它的随机访问速度特快.

LinkedList:LinkedList不同于前面两种List,它不是基于Array的.

因为是基于链表实现的,data,(节点本身数据)nextNode(下一个节点)

所以更适用于 插入,删除操作.

【注意所有的List可以有null元素,元素可以重复】

移除List重复元素:

方法一:通过HashSet剔除 (本人喜欢使用的方式:使用的是hash数组不能产生重复数据的特性,来转换LIST)

//  删除ArrayList中重复元素 
    HashSet hSet  =   new  HashSet(list);
    list.clear();
    list.addAll(hSet);
    System.out.println(list); 
         方法二: 删除ArrayList中重复元素,保持顺序 
   // 删除ArrayList中重复元素,保持顺序 
 public   static   void  removeDuplicateWithOrder(List list)   {
      Set set  =   new  HashSet();
      List newList  =   new  ArrayList();
   for  (Iterator iter  =  list.iterator(); iter.hasNext();)   {
         Object element  =  iter.next();
         if  (set.add(element))
            newList.add(element);
     } 
     list.clear();
     list.addAll(newList);
     System.out.println( " remove duplicate "   +  list);

}

HashSet:set同list一样都实现了Collection接口,但是他们的实现方式却大不一样. 【list是以Array为基础的,而Set则是HashMap的基础上实现的】

HashSet的存储方式是把HashMap中的Key作为Set的 对应存储项,这也是为什么在Set中不能像在List中一样有重复的项的根本原因,因为HashMap的key是不能有重复的。HashSet能快速定位 一个元素,但是放到HashSet中的对象需要实现hashCode()方法0。

TreeSet:Treeset将放入其中的元素按序存放,这就要求你放入其中的

对象时可排序的,这就用到了集合框架提供的另外两个实用类

Comparable和Comparator。

【一个类是可排序的,它就应该实现Comparable接口.】

【有时多个类具有相同的排序算法,那就不需要重复定义相同的排序算法,只要实现Comparator接口即可】

TreeSet是SortedSet的子类,它不同于HashSet的根本就是TreeSet

是有序的,它是通过SortedMap来实现的.

HashMap:也用到了哈希码的算法,以便快速查找一个键,

TreemMap对键按序存放,因此它有一些扩展的方法,比如firstkey(),lastkey()等. 当多个线程访问treemap时,要自己为之提供外同步.

HashTable:不允许空键或值.Hashtable的方法是Synchronize的,

在多个线程访问Hashtable时,不需要自己为它的方法实现同步.

【Map有两种比较常用的实现:HashTable.HashMap和TreeMap.】

java集合框架复习的更多相关文章

  1. java集合框架复习(一)

    数组类Array是java中最基本的一个存储结构,它用于存储 一组连续的对象或一组类型相同的基本类型的数据. Array特点:效率高,但容量固定且无法动态改变, 缺点:无法判断其中存有多少元素,len ...

  2. java集合框架复习----(3)Set

    文章目录 四.set集合 1.hashSet[重点] 2.TreeSet 四.set集合 无序.无下标.元素不可重复 1.hashSet[重点] == 数组+链表+红黑树== 基于hashcode计算 ...

  3. java集合框架复习----(1)

    文章目录 1 .集合框架思维导图 一.什么是集合 二.collection接口 1 .集合框架思维导图 一.什么是集合 存放在java.util.*.是一个存放对象的容器. 存放的是对象的引用,不是对 ...

  4. java集合框架复习----(4)Map、List、set

    文章目录 五.Map集合[重要] 1.hashMap 六.Collections工具类 总结 集合的概念 List集合 set集合: Map集合 Collection 五.Map集合[重要] 特点: ...

  5. java集合框架复习----(2)List

    文章目录 三.List集合 listIterator:迭代器 List实现类 1.泛型类 2.泛型接口 三.List集合 特点 有序,打印输出的顺序和添加时的顺序一致(不会帮你自动排序) 有下标,可以 ...

  6. 【java集合框架源码剖析系列】java源码剖析之java集合中的折半插入排序算法

    注:关于排序算法,博主写过[数据结构排序算法系列]数据结构八大排序算法,基本上把所有的排序算法都详细的讲解过,而之所以单独将java集合中的排序算法拿出来讲解,是因为在阿里巴巴内推面试的时候面试官问过 ...

  7. Java集合框架List,Map,Set等全面介绍

    Java集合框架的基本接口/类层次结构: java.util.Collection [I]+--java.util.List [I]   +--java.util.ArrayList [C]   +- ...

  8. Java集合框架练习-计算表达式的值

    最近在看<算法>这本书,正好看到一个计算表达式的问题,于是就打算写一下,也正好熟悉一下Java集合框架的使用,大致测试了一下,没啥问题. import java.util.*; /* * ...

  9. 【集合框架】Java集合框架综述

    一.前言 现笔者打算做关于Java集合框架的教程,具体是打算分析Java源码,因为平时在写程序的过程中用Java集合特别频繁,但是对于里面一些具体的原理还没有进行很好的梳理,所以拟从源码的角度去熟悉梳 ...

随机推荐

  1. JavaScript DOM编程基础精华03(动态设置,层的操作,性能问题)

    代码是否需要放置到onload中  //如果js代码需要操作页面上的元素,则将该代码放到onload里面.         //因为当页面加载完毕之后页面上才会有相关的元素 //如果js代码中没有操作 ...

  2. 一个酷炫的,基于HTML5,Jquery和Css的全屏焦点图特效,兼容各种浏览器

    基于HTML5和CSS的焦点图特效,梅花图案的背景很有中国特色,而且还会动哦,效果超炫,推荐下载! 演示图 html代码 <!DOCTYPE html PUBLIC "-//W3C// ...

  3. Oracle 数据集成的实际解决方案

    就针对市场与企业的发展的需求,Oracle公司提供了一个相对统一的关于企业级的实时数据解决方案,即Oracle数据集成的解决方案.以下的文章主要是对其解决方案的具体描述,望你会有所收获. Oracle ...

  4. 1287. Mars Canals(DP)

    1287 水DP #include <iostream> #include<cstdio> #include<cstring> #include<algori ...

  5. 1227. Rally Championship

    1227 题意木看懂 是可以停在路上 任何地方 水题一枚 以下条件之一满足就可以 有环(并查集判) 重边 自己到自己的边 最长边大于s(用flod改写下) #include <iostream& ...

  6. 【Todo】深入理解Javascript系列

    真的很好,要看 http://www.cnblogs.com/TomXu/archive/2011/12/15/2288411.html

  7. hdu 3433 A Task Process(dp+二分)

    题目链接 题意:n个人, 要完成a个x任务, b个y任务. 求,最短的时间 思路:由于时间较大,用 二分来找时间. dp[i][j]表示 i个人完成j个x任务, 最多能完成的y任务个数 这个题 不是很 ...

  8. 在ASP.NET中如何判断用户IE浏览器的版本

    f ( Request.Browser.MajorVersion == ) { // to do } ................................................. ...

  9. UVa 1646 (递推 JAVA大数) Edge Case

    题意: 有n个点围成一圈,这n个点的匹配就是没有公共点的边集(这些边只能连接一圈中相邻的两点),求所有匹配的个数. 额,我不会分析..=_=|| 算了几个数,找找规律发现它满足斐波那契数列的递推关系, ...

  10. HDU 2544 最短路 (最短路,spfa)

    题意:中文题目 思路:spfa+SLF优化.关于SPFA的详情请戳我 #include <bits/stdc++.h> using namespace std; , INF=0x7f7f7 ...