你真的了解java吗?java总结九

你真的了解java吗?java总结九,第1张

java面试题:

String 属于基础的数据类型吗?

不属于。

八种基本数据类型:byte、short、char、int、long、double、float、boolean。

1.Arrays类

用于 *** 作数组元素的工具类

基本功能:

    public static void main(String[] args) {
        int[] arr ={1,55,48,3,26,84,12,54,100};
        //1.打印数组内容
        System.out.println(Arrays.toString(arr));

        //2.对数组内容排序
        Arrays.sort(arr);
        System.out.println(Arrays.toString(arr));

        //3.二分搜索技术(排好序之后)
        //若该元素存在,则返回该元素索引,否则返回 -(该插入位置+1)
        int index = Arrays.binarySearch(arr, 26);
        if(index>-1) {
            System.out.println("26的下标元素为:"+index);
        }else {
            System.out.println("该元素不存在");
        }
    }

排序实现:

只能排序引用类型数组

自定义排序我们需要实现Comparator接口,实现结果如下

       //Arrays的sort方法对于有值特性的数组,默认是升序排序
        int[] arr = {2,5,11,6,3,21,51,0,15,4,23};
        //升序排序
        Arrays.sort(arr);

        Integer[] arr1 = {2,5,11,6,3,21,51,0,15,4,23};
        //降序排序
        /*
            参数一:被排序的数组 必须是引用类型的元素
            参数二:匿名内部类对象,代表一个比较器对象
         */
        Arrays.sort(arr1, new Comparator() {
            @Override
            public int compare(Integer o1, Integer o2) {
                //指定比较规则
//                if(o1>o2){
//                    return 1;
//                }else if(o1

对象数组排序

注意,对象数组排序我们需要自己去实现接口,如果直接排序则会报错。

对于浮点数,我们必须使用Double.compare方法进行判断,否则会出现精度误差

        Student[] students = new Student[3];
        students[0] = new Student("张三",15,158);
        students[1] = new Student("李四",12,185);
        students[2] = new Student("王五",13,188);

        //根据年龄排序
        Arrays.sort(students, new Comparator() {
            @Override
            public int compare(Student o1, Student o2) {
                //通过年龄排序
//                return o1.getAge()-o2.getAge();
                //通过身高排序(浮点型需要通过Double.compare方法判断)
//                return Double.compare(o1.getHeight(),o2.getHeight());   //升序
                return Double.compare(o2.getHeight(),o1.getHeight());   //降序
            }
        });
        System.out.println(Arrays.toString(students));
2.Lambda

lambda表达式是JDK8的新语法

作用:简化匿名内部类的代码写法

注意:Lambda表达式只能简化函数式接口的匿名内部类的写法形式

函数式接口:
  • 必须是接口,有且仅有一个抽象方法
  • 通常我们会在接口上方加一个@FunctionalInterface注解,标记改接口必须是满足函数式接口
public class LambdaDemo2 {
    public static void main(String[] args) {

        //第一种
        Sp sp1 = new Sp() {
            @Override
            public void to() {
                System.out.println("sp1~~~~~~");
            }
        };
        s1(sp1);

        //第二种
        Sp sp2 = ()->{
            System.out.println("sp2~~~~~~");
        };
        s1(sp2);

        //第三种
        s1(()->{
            System.out.println("sp3~~~~~~");
        });

    }
    public static void s1(Sp sp){
        sp.to();
    }
}

//一但加上这个接口,必须是函数式接口,只能有一个抽象方法
@FunctionalInterface
interface Sp{
    void to();
}
简化开发工作

以下两段代码的功能相同,使用lambda表达式可以进行简化

        Arrays.sort(arr1, new Comparator() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return -(o1-o2);    //降序
            }
        });
        Arrays.sort(arr1, (Integer o1,Integer o2) -> {
            return -(o1-o2);    //降序
        });
省略规则
  • 参数类型可以不写
  • 如果只有一个参数,参数类型与()都可以省略
  • Lambda表达式方法体代码如果只有一行,那么可以省略大括号不写,同时省略分号
  • Lambda表达式方法体代码如果只有一行,大括号可以不写,如果这行代码是return,则必须省略return不写,同时省略“;”不写

所以,上述代码可以简化成

        Arrays.sort(arr1,(o1, o2) -> o1-o2);
3.集合

集合和数组都是容器

数组特点
  • 定义完成并启动后,类型确定,长度固定。
  • 进行增删改查 *** 作的时候,数组不是很方便,增删数据都需要放弃原有数组或移位
数组使用场景
  • 当业务数据的个数固定,且都是同一批数据类型,可以采用数组存储
集合特点
  • 集合大小不固定,启动后可动态变化,类型可以选择,不固定。
  • 集合非常适合和做元素增删 *** 作
  • 注意:集合中只能存储引用数据类型,如果要存储基本数据类型可以使用包装类
集合使用场景
  • 数据的个数不确定,需要进行增删元素的时候
集合分类
  • 单列(Collection)
  • 双列(Map)

Collection单列集合,每个元素只包含一个值

Map双列集合,每个元素包括两个值(键值对)

Collection的常用实现类
  • List
    • ArrayList
    • LinkedList
  • Set
    • HashSet
      • LinkedHashSet
    • TreeSet
Collection集合特点
  • list集合:添加的元素是有序、可重复、有索引
    • ArrayList、LinekdList:有序、可重复、有索引
  • Set集合:添加元素是无序、不重复、无索引
    • HashSet:无序、不重复、无索引
      • LinkedSet:有序、不重复、无索引
    • TreeSet:按照大小默认升序排序、不重复、无索引
集合对于泛型支持
  • 集合都是支持泛型的,可以在编译阶段约束集合只能 *** 作某种数据类型
        Collection collection2 = new ArrayList();
        //JDK7后,后面的泛型声明可以不写
        Collection collection3 = new ArrayList<>();

注意:集合和泛型只支持引用数据类型,都认为是对象,不支持基本数据类型

Collection基本API:
        Collection list = new ArrayList<>();
        //添加元素
        list.add("JAVA");
        list.add("JAVA");
        list.add("ssm");
        list.add("springboot");
        System.out.println(list);

        //清空集合
//        list.clear();
        System.out.println(list);

        //集合判空
        System.out.println(list.isEmpty());

        //获取集合大小
        System.out.println(list.size());

        //判断是否包含某个元素
        System.out.println(list.contains("JAVA"));

        //删除某个元素,如果有多个重复元素,则删除第一个
        System.out.println(list.remove("JAVA"));
        System.out.println(list);

        //集合转换成数组
        Object[] objects = list.toArray();
        System.out.println("数组:"+Arrays.toString(objects));

        Collection list1 = new ArrayList<>();
        list1.add("redis");

        //将list元素添加到list1中
        list1.addAll(list);
        System.out.println(list1);
遍历Collection集合
    public static void main(String[] args) {
        Collection list = new ArrayList<>();
        list.add("张三");
        list.add("李四");
        list.add("王五");
        list.add("赵六");
        System.out.println(list);

        //1.获得当前集合的迭代器对象
        Iterator iterator = list.iterator();
        while (iterator.hasNext()){
            System.out.println(iterator.next());
        }

        System.out.println("-------------------------------");

        //2.foreach循环
        for (String s : list) {
            System.out.println(s);
        }

        System.out.println("-------------------------------");

        //3.调用接口遍历
        list.forEach(new Consumer() {
            @Override
            public void accept(String s) {
                System.out.println(s);
            }
        });

        System.out.println("--------------------------------");

        //4.lambda表达式形式
        list.forEach(s-> System.out.println(s));

        System.out.println("--------------------------------");

        //5.方法引用
        list.forEach(s-> System.out.println(s));

    }

欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/langs/759069.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-01
下一篇 2022-05-01

发表评论

登录后才能评论

评论列表(0条)