可变参数和数组工具

1、LinkedHashSet

具有可预知迭代顺序的 Set 接口的哈希表和链接列表实现。此实现与 HashSet的不同之外在于,后者维护着一个运行于所有条目的双重链接列表。此链接列表定义了迭代顺序,即按照将元素插入到 set 中的顺序(插入顺序)进行迭代。

特点:

1.元素唯一性

2.有序的

3.允许null存在一

4.不是线程安全(效率高)


package cn.tx.set;

import java.util.LinkedHashSet;
import java.util.Set;

public class LinkedHashSetDemo2 {
	public static void main(String[] args) {
		//创建一个set集合
		
		Set<String> set = new LinkedHashSet<String>();
		set.add("刘备");
		set.add("关羽");
		set.add("张飞");
		set.add("刘备");
		System.out.println(set);
		
	}
}

2、TreeSet

TreeSet可以支持自定义排序,如果TreeSet所存储的对象的类没有实现Comparable接口就会报错ClassCastException。所以我们如果想要使用TreeSet来对自定义的对象来排序必须实现Comparable接口。

特点:

1.元素唯一性

2.可自定义排序的

3.不允许null存在

4.不是线程安全


package cn.tx.set;

import java.util.Set;
import java.util.TreeSet;

public class TreeSetDemo1 {
	public static void main(String[] args) {
		//创建一个set集合
		/**
		 * Treeset的特点:
		 *1、 会自动做自然排序
		 * 2、元素不可重复
		 * 3、不允许有null
		 * 
		 */
	Set<String> set = new TreeSet<String>();
		set.add("b");
		set.add("t");
		set.add("d");
		set.add("c");
		System.out.println(set);
		
		Set<Integer> set1 = new TreeSet<Integer>();
		set1.add(55);
		set1.add(24);
		set1.add(75);
		set1.add(124);
		System.out.println(set1);
		
	}
}

3、可变参数

可变参数的语法:

修饰符 返回值类型 方法名(数据类型变量){ 

}

publicstaticint sum(int ... p){

  return0;

}

注意:参数p实际是一个数组,p都是同一种类型


package cn.tx.set;

public class DymanicParam {
	public static void main(String[] args) {
		int[] p ={1,3,5,7};
		int sum = add(p);
		System.out.println(sum);
		
		
		
	}
	//重载
	public static int add(int a,int b){
		return a+b;
		
	}
	public static int add(int a,int b,int c){
		return a+b+c;
		
	}
	
	/**
	 * 可变参数的定义
	 * 
	 * int...p 参数是一个int类型的数组,相当于int[] p
	 */
	public static int add(int...p){
		int sum = 0;
		for(int i = 0;i < p.length;i++){
			sum += p[i];
		}
		return sum;
	
	}
	
}

4、数组工具

数组的工具类,在API这里的方法都是静态的

把数组转换成字符

②对任意数组排

③对任意的数组做二分法的查找

④把数组转换成List


package cn.tx.set;

import java.util.Arrays;
import java.util.List;

public class ArraysDemo3 {
	public static void main(String[] args) {
		Integer[] arr = {3,19,48,71,119};
		//将数组转换为List
		List<Integer> iList = Arrays.asList(arr);
		System.out.println(iList);
		
		//从数组转换过来的List不能添加和删除,但是可以修改
		//iList.add(15);
		//iList.remove(15);
		iList.set(2,56);
		System.out.println(iList);
	}
	
	

}

package cn.tx.set;

import java.util.Arrays;

public class ArraysDemo2 {
	public static void main(String[] args) {
		int[] arr = {3,19,48,71,119};
		int index = queryBin(arr,48);
		System.out.println(index);
		
		
	}
	//用二分法查找必须是数组是有序排列的,如果没有有序排列,需要先进行排列后在用二分法查找
	public static int queryBin(int[] arr,int val){
		return Arrays.binarySearch(arr, val);
	}
	

}

package cn.tx.set;

import java.util.Arrays;

public class ArraysDemo1 {
	public static void main(String[] args) {
		int[] arr = {3,157,48,71,19};
		ArraysDemo1.arrayToString(arr);
		
		Student[] sarr ={new Student(1,"haha",23),new Student(1,"hehe",23),new Student(1,"",23)};
		ArraysDemo1.arrayToString(sarr);
		
		//ArraysDemo1.arraySort(arr);
		ArraysDemo1.arraySort1(arr);
		
		ArraysDemo1.arraySort2(sarr);
	}
	//数组变成字符串
	public static void arrayToString(int[] arr){
		
		String str = Arrays.toString(arr);
		System.out.println(str);
	}
	
public static void arrayToString(Student[] sarr){
		
		String str = Arrays.toString(sarr);
		System.out.println(str);
	}

public static void arraySort(int[] arr){
	//对int的数组做排序
	Arrays.sort(arr);
	arrayToString(arr);
	
}
//对自定索引位置的数组的元素进行排列
public static void arraySort1(int[] arr){
	Arrays.sort(arr,1,3);
	arrayToString(arr);	
}
//对象的排序
public static void arraySort2(Student[] sarr){
	Arrays.sort(sarr);
	arrayToString(sarr);	
}
}

5、小结

①LinkedHashSet是有序的

②TerrSet是可以自定义排序的

③排序:类必须实现一个接口:comparable<T>才能做排序

④二分法查找数组元素需要该数组必须有序排列,如果没有有序排列,需要先对数组进行排列

⑤数组Arrays工具类中的方法都是静态的,可以直接调用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值