Java 集合框架工具类

时间:2022-11-23 09:09:45
  • Collections
  • Arrays

Collections

  1. 集合框架的工具类, 里面的方法都是静态的, 可以直接使用类名调用

常用方法

1. sort(List<T> list);  // 对实现了 Comparable 接口覆盖了 ComprareTo() 方法的 list 集合排序

// 指定比较器的 list 集合排序
2. static <T> void sort(List<T> list, Comparator<? super T> c); public static void main(String[] args){
demo_1();
} public static void demo_1(){ List<String> list = new ArrayList<String>(); list.add("abc");
list.add("abc");
list.add("zzz");
list.add("cba");
list.add("eee"); // 使用工具类中的 sort() 方法对 list 集合排序
// 因为 String 类覆盖了 CompareTo() 方法
Collections.sort(list); System.out.println(list);
} // 模拟 sort() 方法的实现过程 public static void mySort(List<String> list){ // 选择排序
for(int i = 0; i<list.size()-1; i++){
for(int j=i+1; j<list.size(); j++){ // list 集合 String 类型元素比较
// 因为元素比较使用的是 Comparable 接口中的 CompareTo() 方法
if(list.get(i).compareTo(list.get(j))>0){ // list 集合两个元素互换位置
String temp = list.get(i);
list.set(i, list.get(j));
list.set(j, list.get(i));
}
}
}
} // 升级版本 // list 集合中必须具备比较性, 因此, T extends Comparable
public static <T extends Comparable<? super T>> void mySort(List<T> list){
for(int i = 0; i < list.size()-1; i++){
for(int j = 0; j < list.size(); j++){ if(list.get(i).compareTo(list.get(j))>0){
T temp = list.get(i);
list.set(i, list.get(j));
list.set(j, list.get(i));
}
}
}
} // 带有比较器的 sort() 方法 public static <T> void mySort(List<T> list, Comparator<? super T> comp){
for(int i = 0; i < list.size() -1; i++){
for(int j = 0; j < list.size(); j++){
if(comp.compare(list.get(i), list.get(j)){
Collections.swap(list, i, j);
}
}
}
} // 3. 交换集合元素的位置
static void swap(List<?> list, int i, int j); // 4. 二分查找(折半查找)
static <T> int binarySearch(List<? extends Comparable<? super T>> list, T key); // 5. 求集合最大值
max(Collection<? extends T> coll); // 6. 逆序
reverseOrder(); // 返回一个比较器
reverseOrder(Comparator<T> cmp); // 根据已有比较器来反转 // 7. 替换
replaceAll(List<T> list, T oldVal, T newVal); // 使用另一个值替换 list 集合中所有某一指定的值
fill(List<? super T> list, T obj); // 可以将集合中所有的值替换为同一个值 // 8. 随机排序
shffle(List<?> list); // 9. 多线程时, 给非同步集合加锁变成同步集合
synchronizedCollection(Collection<T> c);
synchronizedList(List<T> list); // 以 list 为例, 说明非同步集合变成同步集合原理 List list = new ArrayList(); // 非同步集合
list = MyCollections.synList(list); // 返回一个同步的 list class MyCollections{ public static List synList(List list){
return new MyList(list);
} // 私有化 MyList 类
private class MyList implements List{ private List list; // 锁
private static final Object lock = new Object(); // 构造函数
Mylist(List list){
this.list = list;
} // 覆盖 list 接口的方法, 直接使用构造函数传入的 List 集合中的方法覆盖
// 只是在方法之前加锁
public boolean add(Object obj){
synchronized(lock);
{
return list.add(obj);
}
} public boolean remove(Object obj){
synchronized(lock);
{
return list.remove(obj);
}
} } }

Arrays

  1. 集合框架的工具类, 里面的方法都是静态的.

常用方法:

  1. toString(); // 返回指定数组的字符串表示形式
// toString() 方法实现原理

public static String toString(int[] a){

    // 健壮性判断
if(a == null){
return "null";
}
int iMax = a.length - 1;
if( iMax == -1)
return "[]"; StringBuilder b = new StringBuilder();
b.append('[');
for(int i = 0; ; i++) { // 中间省略条件判断, 提高效率
b.append(a[i]);
if(i == iMax) //iMax 是常量, 条件在此处判断
return b.append(']').toString();
b.append(", ");
}
}
  1. 数组转换成 List 集合 : List asList(数组);

    原因: 可以使用操作集合的方法操作数组中的元素.
// 判断数组中是否存在某一个元素

String[] arr = {"abc", "haha","xixi"};

// 1. 数组转换为集合
List<String> list = Arrays.asList(arr);
boolean b = list.contains("xixi"); // 注意一: 数组的长度是固定的, 所以对于集合的增删方法是不可以使用的.
会出现 UnsupportedOperationException 异常.
list.add("ccc"); //出现异常 // 注意二:
// 如果数组中的元素是对象, 那么转成集合时,直接将数组中的元素作为集合中的元素进行存储 String[] arr = {"abc", "haha", "xixi"}; List<String> list = Arrays.asList(arr);
System.out.println(list); // 输出结果: [abc,haha,xixi] // 如果数组中的元素是基本类型数值, 那么会将该数组作为集合中的元素进行存储.
// 基本数据类型不能存入集合中 int[] arr1 = {22,33,44,25};
List<int[]> list1 = Arrays.asList(arr1); // List<int[]> 类型为数组
System.out.println(list1); // 输出结果为: [[I@7852e922
  1. 集合转成数组:
    • Collection 接口中
      • Object toArray(); 存在类型提升为 Object
      • <T> T[] toArray(T[] a);
    • 集合转成数组: 可以对集合中的元素操作方法进行限定, 不允许对集合中元素进行增删
List<String> list = new ArrayList<String>();
list.add("abc1");
list.add("abc2");
list.add("abc3"); /*
* toArray() 方法需要传入一个指定类型的数组
* 数组长度如何定义呢?
* 如果长度小于集合的 size, 那么该方法会创建一个同类型并且与集合 size 相同的数组
* 如果长度大于集合的 size, 那么该方法就会使用指定的数组, 存储集合中的元素, 其他位置默认为 null
*
* 建议, 数组长度最好指定为 集合的 size
*/
String[] arr = list.toArray(new String[list.size()]); System.out.println(Arrays.toString(arr));

_参考资料_
- [JavaSE 基础视频(毕向东)](https://www.bilibili.com/video/av3124630/#page=5)
- [JDK 1.6 中文文档](http://tool.oschina.net/apidocs/apidoc?api=jdk-zh)

Java 集合框架工具类的更多相关文章

  1. java集合框架——工具类

    一.概述 JAVA集合框架中有两个很重要的工具类,一个是Collections,另一个是Arrays.分别封装了对集合的操作方法和对数组的操作方法,这些操作方法使得程序员的开发更加高效. public ...

  2. java集合框架工具类Collections&comma;集合的操作

    1 import java.util.*; public class asList { public static void main(String args[]) { // int arr[] = ...

  3. JAVA基础学习之 Map集合、集合框架工具类Collections,Arrays、可变参数、List和Set集合框架什么时候使用等(4)

    package com.itcast.test20140113; import java.util.ArrayList; import java.util.Arrays; import java.ut ...

  4. java基础37 集合框架工具类Collections和数组操作工具类Arrays

    一.集合框架工具类:Collections 1.1.Collections类的特点 该工具类中所有的方法都是静态的 1.2.Collections类的常用方法 binarySearch(List&lt ...

  5. Java集合——Collections工具类

    Java集合——Collections工具类 摘要:本文主要学习了Collections工具类的常用方法. 概述 Collections工具类主要用来操作集合类,比如List和Set. 常用操作 排序 ...

  6. java 集合Collections 工具类:排序,查找替换。Set、List、Map 的of方法创建不可变集合

    Collections 工具类 Java 提供1个操作 Set List Map 等集合的工具类 Collections ,该工具类里提供了大量方法对集合元素进行排序.查询和修改等操作,还提供了将集合 ...

  7. Java集合----Collection工具类

    Collections 工具类 Collections 是一个操作 Set.List 和 Map 等集合的工具类 Collections 中提供了大量方法对集合元素进行排序.查询和修改等操作,还提供了 ...

  8. Java基础---泛型、集合框架工具类:collections和Arrays

    第一讲     泛型(Generic) 一.概述 1.JDK1.5版本以后出现的新特性.用于解决安全问题,是一个类型安全机制. 2.JDK1.5的集合类希望在定义集合时,明确表明你要向集合中装入那种类 ...

  9. 集合框架-工具类-Arrays-asList方法

    1 package cn.itcast.p3.toolclass.arrays.demo; 2 3 import java.util.ArrayList; 4 import java.util.Arr ...

随机推荐

  1. struts-validate&period;xml配置详解demo

    <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE validators PUBLIC &quo ...

  2. iOS开发之滤镜的使用技巧(CoreImage)

    一.滤镜的内容和效果是比较多并且复杂的 ,学习滤镜需要技巧 如下: 两个输出语句解决滤镜的属性选择问题: 1.查询效果分类中包含什么效果按住command 点击CIFilter 进入接口文件 找到第1 ...

  3. 利用MyEclipes的反转工程来配置Hibernate各种配置

    首先需要有设计好的数据库,然后创建一个Web Project然后右键点击项目选择MyEclipse→add Hibernate Capabilities →→ →→,然后如果没有管理员的话需要在选择M ...

  4. shell脚本变量定义注意别跟系统变量重名了……

    写了个很简单的脚本,执行结果却很奇怪.   1 #!/bin/bash PATH=$HOME/vlc_transplant4 rm -f $PATH/vlc ln -s $PATH/bin/vlc-s ...

  5. HTML中如何添加日历插件(JQUERY)

    日期插件的包为:mydate.js1:首先将日期插件的包引入到页面中 1 <script language="JavaScript" src="../Inc/Js/ ...

  6. pygame系列&lowbar;font游戏字体

    在pygame游戏开发中,一个友好的UI中,漂亮的字体是少不了的 今天就给大伙带来有关pygame中字体的一些介绍说明 首先我们得判断一下我们的pygame中有没有font这个模块 1 if not ...

  7. 20175320 2018-2019-2 《Java程序设计》第2周学习总结

    20175320 2018-2019-2 <Java程序设计>第2周学习总结 教材学习内容总结 本周学习了教材的第二章及第三章的内容.在这两章中介绍了Java编程中的基本数据类型与数组以及 ...

  8. 展示博客(Alpha版本&rpar;

    小队名称:PHILOSOPHER 小组成员 [组长]金盛昌(201421122043).刘文钊(20142112255).陈笑林(201421122042) 张俊逸(201421122044).陈志建 ...

  9. Servlet与JSP的区别(转)

    原文链接:Servlet与JSP的区别 两者之间的联系和区别 [1]JSP第一次运行的时候会编译成Servlet,驻留在内存中以供调用. [2]JSP是web开发技术,Servlet是服务器端运用的小 ...

  10. 本地代码同步到github

    1 设置 ssh 公钥信息 首先你要确保 github 账号设置了ssh 公钥信息.如果没有的话可以按照下面的方式设置: 前往 github 网站的 account settings, 依次点击 Se ...