(517)数组转换集合 idea创建一个新文件

集合转换为数组
Collection提供了一个方法toArray。可以将当前集合转换为一个数组

重载的toArray方法要求我们传入一个需要转换的数组
长度通常与集合size一致即可。
如果数组长度小于集合size,那么toArray方法内部会创建
一个与该数组类型且与集合size等长的数组将其返回
String[] array = c.toArray(new String[c.size()]);

数组转换为集合
* 数组的工具类Arrays提供了一个静态方法asList
* 可以将一个数组转换为一个List集合
asList方法内部:
创建一个名为ArrayList的实例(注意,它不是java.util.ArrayList
而是Arrays自己定义的一个内部类)。该实例会直接引用传入的数组。
因此对该集合的操作就是对该数组的操作。
List<String> list = Arrays.asList(array);

因为数组定长,所以试图改变长度的操作都是不支持的,会抛出不支持操作异常
可以自行创建一个新集合,然后包含前面数组转换的集合,这样就可以
            随意的修改元素了且不会对原数组产生影响。
        List<String> list2 = new ArrayList<>();//创建一个新数组
        list2.addAll(list);//增加一个元素list

所有的集合都支持一种参数为Collection的构造器
作用是在创建该集合的同时就包含参数传入的集合中所有元素
List<String> list2 = new ArrayList<>(list);
//在创建该集合的同时就包含参数传入的集合中所有元素
上面的实例化等同于:
List<String> list2 = new ArrayList<>();
list2.addAll(list);
集合的排序
* java.util.Collections是集合的工具类,提供了很多static方法用于操作集合
* 其中提供了一个名为sort的方法,可以对List集合进行自然排序(从小到大)
Collections.sort(list);//将list集合进行从小到大排序
排序包含自定义类型元素的集合
List<Point> list = new ArrayList<>();
sort方法在排序时要求集合元素必须实现:Comparable接口
compare:比较
开发中我们定义的类不会去实现Comparable接口。原因:
该排序功能对我们的代码具有侵入性。
侵入性:
当我们使用某个API功能是,其放过来要求我们为它实现接口或做某些继承
并定义相关方法时,可以认定,该API功能对我们的代码具有侵入性。
 Collections.sort(list);//编译不通过,需要重写方法
public int compare(Point o1, Point o2) {
    /*
        比较标准:点到原点的距离长的大
     */
    int olen1 = o1.getX()*o1.getX()+o1.getY()*o1.getY();
    int olen2 = o2.getX()*o2.getX()+o2.getY()*o2.getY();
    /*
        判断大小的返回值:
        当返回值>0时,表达o1>o2
        当返回值<0时,表达o1<o2
        当返回值=0时,表达o1=o2
     */
    return olen1-olen2;
}
排序字符串 
Collections.sort(list);//字符串自身的比较规则不满足对中文的排序
//可以为String自定义一种比较规则对集合排序
Collections.sort(list, new Comparator<String>() {
    public int compare(String o1, String o2) {
        return o1.length()-o2.length();//字多的大,字少的小,降序则采取相反o2.length-o1.length
    }
});
Lambda表达式-JDK8之后推出的新特性
* 语法:
* (参数列表)->{
*     方法体
* }
*
* 当使用匿名内部类创建时,如果实现的接口只有一个抽象方法,则可以使用lambda表达
* 式代替,使代码更简洁优雅。
*
* 在java中可以使用lambda表达式代替匿名内部类创建所需要实现的
* 接口时,该接口上都有一个注解:@FunctionalInterface


自定义比较器的匿名内部类写法
Comparator<String> c1 = new Comparator<String>() {
    public int compare(String o1, String o2) {
        return o1.length()-o2.length();
    }
};
lambda表达式就是省去了匿名内部类创建是接口与方法名部分
lambda表达式可以忽略参数的类型
Comparator<String> c3 = (o1,o2)->{
    return o1.length()-o2.length();
};
如果方法中只有一句代码时,该方法体的"{}"可以忽略不写
如果这句代码含有return关键字时,也要一同忽略return
Comparator<String> c4 = (o1,o2)->o1.length()-o2.length();
lambda表达式实际上是编译器认可的,最终会被改回为内部类方式创建
//源代码中使用lambda可以更突出重点-原匿名内部类中重写方法的逻辑
JDK8之后,java在集合Collection接口中添加了一个用于遍历集合元素的forEach
*方法。可以基于lambda表达式遍历集合元素。

//新循环方式(迭代器方式)
for(String e : c){
    System.out.println(e);
}

//tips:当lambda中只有一个参数时,参数列表的"()"可以忽略不写
c.forEach(e->System.out.println(e));
/*
    JDK8中出现的lambda表达式的变种写法:方法引用
    对象::方法
    当lambda表达式的参数与方法体中调用方法的参数一致时
    例如:
    (e)->System.out.println(e);
    那么就可以写作:
    System.out::println;
          对象::方法
    现在以了解为主即可
 */
c.forEach(System.out::println);

java.io.File
* File类的每一个实例用于表示文件系统中的一个文件或目录(本质是保存一个路径)
* 使用File我们可以:
* 1:访问文件或目录的属性(名字,大小等信息)
* 2:创建/删除 文件或目录
* 3:访问一个目录中的所有子项
*
* 但是不能访问文件数据  
       
        实际开发中,我们不会使用绝对路径:因为存在跨平台问题
//      File file = new File("D:/project/JSD2304SE/demo.txt");
//      相对路径中"./"表示当前目录,在IDEA中是当前项目目录
        File file = new File("./demo.txt");
        String name = file.getName();//获取名字的方法
 long length
    返回当前File表示的文件的长度(单位是字节)
 */
long len = file.length();//获取文件的长度
System.out.println("大小:"+len);
是否可读
boolean cr = file.canRead();
System.out.println("是否可读:"+cr);
是否可写
boolean cw = file.canWrite();
System.out.println("是否可写:"+cw);
是否隐藏
boolean hidden = file.isHidden();
System.out.println("是否隐藏:"+hidden);

在当前项目目录下新建一个名为test.txt的文件
File file = new File("./test.txt");
/*
    create:创建
    file:文件

    boolean createNewFile()
    当且仅当File表示的路径下不存在且实际创建出该文件时返回true

    boolean exists()
    判断当前File表示的路径下是否真实存在该文件或目录,如果存在则返回true
 */
if(file.exists()){
    System.out.println("该文件已存在");
}else {
    file.createNewFile();//
    System.out.println("创建完毕");
}
//将当前目录下的test.txt文件删除
//相对路径中"./"是可以忽略不写的,默认就是从"./"开始
File file = new File("test.txt");//等价于"./test.txt"
/*
    boolean delete()
    当且仅当File表示的文件或目录被成功删除返回true
 */
boolean delete = file.delete();
System.out.println("删除"+(delete?"成功":"失败"));
 //在当前项目目录下新建一个目录:demo
//        File dir = new File("./demo");

//      创建目录f:f目录在./a/b/c/d/e/f
        File dir = new File("./a/b/c/d/e/f");
        /*
            make:做
            mkdir是linux中的一个命令,用于创建一个目录
         */
//        dir.mkdir();//创建目录时要求该目录所在的目录必须存在,否则创建失败
        dir.mkdirs();//创建目录时会自动将所有不存在的父目录一同创建,推荐使用
//将当前项目目录下的demo目录删除
File dir = new File("./demo");
/*
    delete方法在删除目录时要求必须是空目录,否则删除失败
 */
dir.delete();//只能删除一个目录最底层的一个
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值