列表与集合  (一切输出都用for each!丢弃迭代器)

列表List

1 顺序表 Arraylist  适用于静态查找
2   链式双向表 Linkedlist 适用于增删该查
3 (容器) Vector  适用于多线程 使得数据同步 

集合Set

1 HashSet  无序 可null ---- 
2 TreeSet  可排序 不可null 通过compareTo和Comparator排序
3 LinkedHashSet     可排序 可null 按照插入顺序排序
都有以下方法
  1 add增remove删contains查size大小retainAll交集Clear清除
  2 SortedSet s=Collections.synchronizedSortedSet(new SET方法); 加入使得集合可支持同步(多线程)
    3 当类作为集合类型 要进行比较时,
    ①对于HashSet  LinkedHashSet   系统会先判断hashCode()是否相同,若相同再判断equals()函数,符合两条才确定相同
     解决方法:
      1) 需要重写hashCode()函数 否则按照父类object的会比较哈希值
      2 )重写equals()函数
      3 )附加重写toString方法
    ②对于TreeSet  通过compareTo和Comparator排序
     解决方法:
        1)继承comparable接口
                        2 )重写compareTo函数

工具类

Arrays 处理数组

排序:  sort
查找  binarySearch
批量复制   copyOf
批量赋值   fill
等价性比较  equals

Collections 处理collection及其子类

排序:  sort
查找  binarySearch
批量赋值   fill
找最大最小值   max,min
反序  reverse
自定义对象排序时
1 要实现Comparable 接口 重写compareTo方法
2 无源码时 调用比较器Comparator 重写compare()方法
 
 
 
 

以上是对其部分总结 下方为具体实现

=======================================================================================

一.list接口()
  1.有序的
  2.允许多个null元素

3.对列表每个元素的插入位置进行精确控制

具体实现类ArrayList,Vector,LinkedList

使用规则:

1.安全性问题           //用vector
2.是否频繁插入,删除操作   //用linkedlist
3.是否存储后遍历        //用arraylist

======================================================

   ①  Vector
  * 1.实现原理 采用动态对象数组实现 默认构造方法创建大小为10的对象值
  * 2.扩充算法:当增量为0扩充为两倍
  * 3.不适合进行删除和插入操作
  * 4.为防止扩充次数过多 建议给定初始容量
  * 5.线程安全 适合在多线程访问使用,单线程效率低

    public static void vector() {
Vector<String> v=new Vector<String>();
v.add("a");
v.add("b");
v.add("c");
v.add("f");
//遍历集合
for(int i=0;i<list.size();i++) {
System.out.println(list.get(i));
}
}

   ②  ArrayList()
  * 1.实现原理 采用动态对象数组实现
  * 2.第一次添加元素拓展容量为10 之后扩充算法:原来大小*1.5
  * 3.不适合进行删除和插入操作
  * 4.为防止扩充次数过多 建议给定初始容量
  * 5.适用于单线程 效率高

public static void arraylist() {
// * 前面不定义<>类型使用集合存储多个不同类型的元素
// * 定义类型后<类型>应在一个集合中存同意一类型
List<String> list=new ArrayList();
list.add("a");
list.add("b");
list.add("c");
list.add("f");
// list.add(20); //遍历集合
for(int i=0;i<list.size();i++) {
System.out.println(list.get(i));
}
}

     ③ LinkedList
  * 1.实现原理:采用双向链表结构实现
  * 2.适合插入删除操作,性能高
  * 在实际开发中 选择list的具体实现

================================================================================================================================================================================

  二.set接口
 * 1.无序的(不保证顺序)
 * 2.不允许重复元素
 * HashSet,TreeSet,LinkedHashSet

** 使用选择
 * HashSet,       不排序,不用保证顺序
 * TreeSet,         要排序
 * LinkedHashSet   不要排序,要录入顺序

===================================================

  ①HashSet
  * 1.实现原理,基于哈希表(HashMap)实现
  * 2.不允许重复(重复会覆盖),可以有一个null元素
  * 3.不保证顺序恒久不变
  * 4.添加元素时把元素作为HashMap的key存储,value使用一个固定对象
  * 5.两对象是否相同
   (1)先哈希值比较
   (2)若1正确 再用equal函数判断 才可确定
  * 6.若自定义对象认为属性值都相同时为同一对象, 则需重写对象所在类的HashCode和equal方法
  *
  * 小结
  * ①.哈希表:数组+链表
  * ②.把对象存到哈希表中,先计算对象的hashcode值 再对数组的长度求余数 得到结果不同存于数组,相同存于链表

private static void hashset() {
Set<String> set=new HashSet<String>();
set.add("ok");
set.add("no");
set.add("ok");
String[] str=set.toArray(new String[] {});
for(String s:str)
System.out.println(s);
}
public static void main(String[] args) {
hashset();
}

  ②treeset

*  1.有序的,基于TreeMap(二叉树数据结构),对象需要比较大小通过对象比较器来实现
  *  2.对象比较器可以用来去除重复元素,
  *  3.自定义的数据类,没有实现比较器的接口,将无法添加到Treeset集合中

    private static void treeset() {
Set<hero>tree=new TreeSet<hero>(new herocomparator());
hero h1=new hero("卡特",1,20);
hero h2=new hero("龙女",2,22);
hero h3=new hero("男刀",3,32);
hero h4=new hero("ez",4,19);
tree.add(h1);
tree.add(h2);
tree.add(h3);
tree.add(h4);
for(hero h:tree)
System.out.println(h);
}

  ③LinkedHashSet<> 

*1.哈希表和链接列表实现
  * 2.维护着一个运行于所有条目的双重链接列表。此链接列表定义了迭代顺序,即按照将元素插入到set中的顺序进行迭代

    private static void linkedhashset() {
LinkedHashSet<hero> link=new LinkedHashSet<hero>();
hero h1=new hero("卡特",1,20);
hero h2=new hero("龙女",2,22);
hero h3=new hero("男刀",3,32);
hero h4=new hero("ez",4,19);
link.add(h1);
link.add(h2);
link.add(h3);
link.add(h4);
for(hero h:link)
System.out.println(h);
}

============补充==========

  上述的set接口所用的hero类

/**
*
*/ /**
* @author CF
* @hero 类做setdemo示例
* 2019年3月11日
* 下午1:53:23
*/
public class hero {
private String name;
private int id;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public hero() {
super();
// TODO Auto-generated constructor stub
}
public hero(String name, int id, int age) {
super();
this.name = name;
this.id = id;
this.age = age;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + age;
result = prime * result + id;
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
hero other = (hero) obj;
if (age != other.age)
return false;
if (id != other.id)
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}
@Override
public String toString() {
return "hero [name=" + name + ", id=" + id + ", age=" + age + "]";
} }

  上述treeset()方法所用的herocomparator比较器接口

import java.util.Comparator;
/**
* @author CF
* @做啥?
* 2019年3月11日
* 下午2:06:20
*/
public class herocomparator implements Comparator<hero>{
/*
* 覆盖了父类的compare函数
*/
@Override
public int compare(hero o1, hero o2) { return o1.getAge()-o2.getAge();
}
}

  Iterator类 用于集合的输出(迭代)

public class Iteratordemo {

    private static void iterator1(Collection<hero> c) {
for(hero h:c) {
System.out.println(h);
}
}
private static void iterator2(Collection<hero> c) {
Iterator<hero> it=c.iterator();
while(it.hasNext()) {
System.out.println(it.next());
} }
public static void main(String[] args) {
Set<hero>tree=new TreeSet<hero>(new herocomparator());
hero h1=new hero("卡特",,);
hero h2=new hero("龙女",,);
hero h3=new hero("男刀",,);
hero h4=new hero("ez",,);
tree.add(h1);
tree.add(h2);
tree.add(h3);
tree.add(h4);
iterator2(tree);
}
}

java 列表与集合总结的更多相关文章

  1. java中 列表,集合,数组之间的转换

    java中 列表,集合,数组之间的转换 java中 列表,集合,数组之间的转换 java中 列表,集合,数组之间的转换 List和Set都是接口,它们继承Collection(集合),集合里面任何数据 ...

  2. Java列表

    Java列表踩过的坑 其中subList是RandomAccessSubList,不是序列化的列表,不可以加入tair. 加入tair测试代码 @Autowired private CacheMana ...

  3. Java中的集合框架

    概念与作用 集合概念 现实生活中:很多事物凑在一起 数学中的集合:具有共同属性的事物的总体 java中的集合类:是一种工具类,就像是容器,储存任意数量的具有共同属性的对象 在编程时,常常需要集中存放多 ...

  4. Java Hour 13 集合基础

    有句名言,叫做10000小时成为某一个领域的专家.姑且不辩论这句话是否正确,让我们到达10000小时的时候再回头来看吧. 本文作者Java 现经验约为13 Hour,请各位不吝赐教. Java 中的集 ...

  5. java基础知识回顾之java集合类-Properties集合

    /** java.lang.Object   |--java.util.Dictionary<K,V>      |--java.util.Hashtable<Object,Obje ...

  6. 【转】Java如何克隆集合——深度拷贝ArrayList和HashSet

    原文网址:http://blog.csdn.net/cool_sti/article/details/21658521 原英文链接:http://javarevisited.blogspot.hk/2 ...

  7. java学习笔记—集合之Map集合

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; text-align: center; font: 12.0px Times } p.p2 { margin: 0.0p ...

  8. java中的集合操作类(未完待续)

    申明: 实习生的肤浅理解,如发现有错误之处.还望大牛们多多指点 废话 事实上我写java的后台操作,我每次都会遇到一条语句:List<XXXXX> list = new ArrayList ...

  9. Java中的集合概述

    Java中的集合类有两个重要的分支,分别是接口Collection(包括List,Set等)和接口Map. 由于HashSet的内部实现原理使用了HashMap,所以我们先来了解Map集合类. 1.H ...

随机推荐

  1. 凸优化 Convex Optimization PDF 扫描文字识别版

    凸优化理论 Convex Optimization 清华大学出版社 王书宁许窒黄晓霖译 Stephen Boyd Lieven Vandenbergt原著 2013 年l 月第1 版 下载链接 链接: ...

  2. 基于Halcon的一维条码识别技巧

    Bar Code 条形码 1.clear_all_bar_code_models    清除所有条形码模型释放内存clear_all_bar_code_models( : : : )2.clear_b ...

  3. 配置环境是程序员的第一步 -- Windows 10 下 MySQL 安装

    MySQL 作为最典型的关系型数据库管理系统,由于其体积小.速度快.总体拥有成本低,尤其是其开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库.MySQL 社区版的功能也足够我们 ...

  4. JavaWeb之JSP入门

    JSP原理及执行过程 流程图分析 用户发起请求,用户通过浏览器访问jsp页面,浏览器将HTTP协议的请求部分发送到服务端. 服务端获取请求部分,分析请求,发现本次的请求的的是jsp页面,jsp引擎按照 ...

  5. 【bzoj2208】[Jsoi2010]连通数

    2208: [Jsoi2010]连通数 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 2305  Solved: 989[Submit][Status ...

  6. ThinkPHP3.2 插入数据库数据,缓存问题

    每个字段都是有数据的,可是就是is_new插不进去, 最后的原因就是TP有数据库字段缓存,FUCK 把RunTIme下面的Data文件夹删除掉,在开发模式中就把自动缓存改成Fasle

  7. Solidity notes

    1. 查询transaction历史记录 https://forum.ethereum.org/discussion/2116/in-what-ways-can-storage-history-be- ...

  8. 微信WeixinJSBridge API 屏蔽右上角分享等常用方法

    WeixinJSBridge这个API有几个功能还是相当有用的,比如: 1.隐藏微信网页右上角的按钮(...按钮):开发者可以用这个功能来禁止当前页面被分享 2.隐藏微信网页底部的导航栏(比如前进后退 ...

  9. Luogu 4473 [国家集训队]飞飞侠

    BZOJ 2143 新技能:并查集优化最短路. 暴力最短路是$O(n^4)$的,然后拿个线段树优化一下连边就$O($能过$)$了. 但是这样都太慢了. 我们考虑一个点如果之前被更新过了,那么之后就不会 ...

  10. Luogu 3206 [HNOI2010]城市建设

    BZOJ 2001 很神仙的cdq分治 先放论文的链接   顾昱洲_浅谈一类分治算法 我们考虑分治询问,用$solve(l, r)$表示询问编号在$[l, r]$时的情况,那么当$l == r$的时候 ...