LinkedHashSet集合和可变参数

LinkedHashSet集合

 

 

 

我们知道HashSet保证元素唯一,可是元素存放进去是没有顺序的,那么我们要保证有序,怎么办呢?

在HashSet下面有一个子类java.util.LinkedHashSet,它是链表和哈希表组合的一个数据存储结构。

java.utiL.LinkedHashset集合extends Hashset集合LinkedHashset集合特点:

底层是一个哈希表(数组+链表/红黑树)+链表:多了一条链表(记录元素的存储顺序),保证元素有序

复制代码
 public static void main(String[] args) {
        HashSet<String> set = new HashSet<>();
        set.add( "www" );
        set.add( "abc" );
        set.add( "abc" );
        set.add( "itcast" );
        System.out.println(set);//无序,不允许重复
        
        
        LinkedHashSet<String> linked = new LinkedHashSet<>();
        linked.add( "www" );
        linked.add("abc");
        linked.add("abc");
        linked.add( "itcast" );
        System.out.println(linked);//有序,不允许重复
    }
复制代码
复制代码
public class LinkedHashT {
    public static void main(String[] args) {
        //创建一个LinkedHashSet集合:
        LinkedHashSet<Integer> lhs = new LinkedHashSet<>();
        System.out.println(lhs.add(9));//true
        lhs.add(5);
        lhs.add(8);
        System.out.println(lhs.add(9));//false 这个9没有放入到集合中
        lhs.add(6);
        System.out.println(lhs.size());//4 唯一,有序
        System.out.println(lhs); //[9, 5, 8, 6]
    }
}
复制代码

 

可变参数

概念

可变参数(variable argument)允许你指定可以采用多个同类型参数的方法,而不需要事先确定参数的数目。

在JDK1.5之后,如果我们定义一个方法需要接受多个参数,并且多个参数类型一致,我们可以对其简化

格式:

  修饰符   返回值类型     方法名(参数类型...形参名){}

其实这个书写完全等价与

  修饰符    返回值类型      方法名(参数类型门]形参名){}

只是后面这种定义,在调用时必须传递数组,而前者可以直接传递数据即可。

JDK1.5以后。出现了简化操作。...用在参数上,称之为可变参数。
  同样是代表数组,但是在调用这个带有可变参数的方法时,不用创建数组(这就是简单之处),直接将数组中的元素作为实际参数进行传递,其实编译成的class文件,将这些元素先封装到一个数组中,在进行传递。这些动作都在编译.class文件时,白动完成了

 

可变参数:是JDK1.5之后出现的新特性

使用前提:

  当方法的参数列表数据类型已经确定,但是参数的个数不确定,就可以使用可变参数.

使用格式:定义方法时使用

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

可变参数的原理:

  可变参数底层就是一个数组,根据传递参数个数不同,会创建不同长度的数组,来存储这些参数

  传递的参数个数,可以是o个(不传递),1,2...多个

复制代码
public static void main(String[] args) {
        /*
            定义计算(0-n)整数和的方法
            已知:计算整数的和,数据类型已经确定int
            但是参数的个数不确定,不知道要计算几个整数的和,就可以使用可变参数
            public static int add(int. . .arr){
            }
            //定义一个方法,计算三个int类型整数的和
            */
        int i =  add(12,12);
        System.out.println(i);
    }
    public static  int add(int...arr){
//        System.out.println(arr);
//        System.out.println(arr.length);
        int num = 0;
        for (int i :arr){
            num+=i;
        }
        return num;
    }

//        public static int add(int a,int b,int c){
//            return a+b+c;
//           }
//        //定义一个方法,计算两个int类型整数的和
//        public static int add (int a,int b) {
//            
复制代码

 

复制代码
package com.zhong.method;

public class Demo04{     
       public static void main(String  args[]) {
            //调用可变参数的方法
            printMax(...numbers:34,3,3,2,56.5);
            printMax(new double[]{1,2,3});
       }
       
    public static void printMax(double... numbers){  
    //double...  就是声明方法 参数类型。  numbers 就是可变参数                      
        if(numbers.length==0) {   //可变参数的长度等于0
           System.out.println("No argument passed");
           return;
       }
       double result = numbers[0];  //返回值result;numbers[0]是数组。
       //排序!
       for (int i = 1;i < numbers,length; i++){
          if (numbers[i]>result){
              result = numbers[i];
            }
         }
        System.out.println("The max value is" + result);
    }
复制代码

 

复制代码
package com.zhong.method;

  public class Demo04 {     
       public static void main(String [] args){
           Demo04 demo04 = new Demo04(); //新建一个类返回当前对象
           demo04.tset(x:1,...i:1,2,3,4,5,90); //这就是数值
       }
          public void test(int x,int... i){//可变参数 i
                 System.out.println(0);
                 System.out.println(1);
                 System.out.println(2);
                 System.out.println(3);
                 System.out.println(4);
                 System.out.println(5);
          }
            Scanner scanner = new Scanner(System.in);
            System.out.println("hello,world!");
       scanner.close();
     }
}
复制代码

 

posted @   漁夫  阅读(38)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示