排列 二分查找 字符串 方法

  • 排列
 1 int nums[] = new int[]{72,72,72,72,89,65,58,87,91,53,82,71,93,76,68};
 2         Integer[] integer_nums = new Integer[] {72,72,72,72,89,65,58,87,91,53,82,71,93,76,68};
 3         //sort和parallelSort相比,大型数据的话parallelSort会相对快一些
 4         Arrays.sort(nums);
 5         System.out.println(Arrays.toString(nums));
 6         //实现降序排列
 7         //需要实现Comparator方法
 8         Arrays.sort(integer_nums, new Comparator<Integer>(){
 9             public int compare(Integer a , Integer b) {
10                 return b - a;
11             }
12         });
13         System.out.println(Arrays.toString(integer_nums));
14         
  • 二分查找
 1 //binarySearch返回查找元素的下标
 2         //找不到返回的是-1
 3         //13
 4         int index = Arrays.binarySearch(nums, 91);
 5         System.out.println(index);
 6         
 7         //copyOf方法,截取数组中的一部分(前 n 个)
 8         //[53, 58, 65, 68, 71]
 9         int[] new_nums = Arrays.copyOf(nums, 5);
10         System.out.println(Arrays.toString(new_nums));
11         
  • 字符串

 

 

JAVA的基本数据类型为什么不包括String?

字符串内部其实就是一个使用final关键字定义的char[]数组,数组长度一旦声明则不可改变,字符串一旦声明则不可改变,改变的引用内存指向。

String属于一个类,不属于一个关键字、准确的说它不是一个数据类型。只是由于它字符串的特殊支持,我们习惯把它叫做字符串类型。

 

 

  1. copyOf
  2. copyOfRange
  3. 字符串定义
  4. 字符串拼接
  5. 任意类型和字符串拼接的结果都是字符串
  6. 字符串长度
  7. indexOf
  8. lastIndexOf
  9. charAt
  10. 异常
  11. 截取字符串substring
  12. 返回字符数组toCharArray
  13. split
  14. replace
  15. 字符串比较(有new 就是不相等,因为是新的地址空间)
  16. 字符串拼接(StringBuffer&&StringBuilder)
  17. arraycopy
  18. final 修饰的字符串
  19. 对字符串的修改都不会改变原串
  20. 字符数组转字符串
1 //copyOf方法,截取数组中的一部分(前 n 个)
2         //[53, 58, 65, 68, 71]
3         int[] new_nums = Arrays.copyOf(nums, 5);
4         System.out.println(Arrays.toString(new_nums));
1 //copyOfRange方法,返回数组中从a-b的部分
2         //[65, 68, 71, 72, 72]
3         new_nums = Arrays.copyOfRange(nums, 2, 7);
4         System.out.println(Arrays.toString(new_nums));
5         
1 //字符串定义
2         String str = "java so easy";
3         str = new String("java so easy");
4         //1.字符串不是基本数据类型
5         //2.String不是关键字
6         //3.String在java.lang包下
1 //字符串拼接
2         String str1 = "Hello";
3         String str2 = "World";
4         System.out.println(str1 + str2);//HelloWorld
5         
1 //任意类型和字符串拼接的结果都是字符串
2         //+号的优先级一样
3         str = 12 + 23 + "结果";//35结果
4         str = "结果" + 12 + 23;//结果1223
5         
1 //字符串长度
2         System.out.println(str.length());//6
3         //注意:是方法,而不是和数组呢些的一样是一个属性
4         
1 //indexOf方法查找子串出现位置的下标,如果找不到返回-1
2         str = "1234567894";
3         System.out.println(str.indexOf("3"));//2
4         System.out.println(str.indexOf("0"));//-1 表示没找到
5         System.out.println(str.indexOf("456"));//3 (找子串)
6         
1 //返回最后一次出现的下标
2         index = str.lastIndexOf("4");
3         System.out.println(index);
4         //9
5         
1 //charAt返回下标为n的字符
2         char c = str.charAt(2);
3         System.out.println(c);
4         //3
1 //异常
2         //char c = str.charAt(11);
3         //StringIndexOutOfBoundsException
4         
5         //int nu = 12/0;
6         //System.out.println(nu);
7         //ArithmeticException
8         
1 //截取字符串
2         str = "123456789";
3         System.out.println(str.substring(1));
4         //23456789
5         System.out.println(str.substring(1 , 4));
6         //234
1     //返回字符数组
2         System.out.println(str.toCharArray());
3         //123456789
1 //split是切割字符串的,选择的字符会被切掉
2         String[] arr = str.split("6");
3         System.out.println(Arrays.toString(arr));
4         //[12345, 789]
1 String str3 = "11111111";
2         String[] arr3 = str3.split("1");
3         System.out.println(Arrays.toString(arr3));
4         //[]
1 //replace把一部分替换成另一个
2         System.out.println(str.replace("123", "0"));
3         //0456789

 

 1 //字符串比较
 2         //结论: 有new 就是不相等,因为是新的地址空间
 3         
 4         String str1 = "1234";
 5         String str2 = "1234";
 6         
 7         String str3 = new String("1234");
 8         String str4 = new String("1234");
 9         
10         String str5 = "12" + "34";
11         String str6 = "1" + "234";
12         
13         String str7 = "12" + new String("34");
14         String str8 = "1" + new String("234");
15         
16         System.out.println(str1 == str2);//true
17         
18         System.out.println(str1 == str3);//false
19         System.out.println(str3 == str4);//false
20         
21         System.out.println(str1 == str6);//true
22         System.out.println(str5 == str6);//true
23         
24         /**************************************/
25         System.out.println(str1 == str7);//false
26         System.out.println(str1 == str8);//false
27         System.out.println(str7 == str8);//false
28         
29         //比较字符串的值是否一样
30         //equals
31         boolean bool = str1.equals(str3);
32         System.out.println(bool);
33         //true

 final修饰的字符串

 1  String hw = "hello world";
 2 
 3     String hello = "hello";
 4     final String finalWorld2 = "hello";
 5     final String finalWorld3 = hello;
 6     final String finalWorld4 = "he" + "llo";
 7 
 8     String hw1 = hello + " world";
 9     String hw2 = finalWorld2 + " world";
10     String hw3 = finalWorld3 + " world";
11     String hw4 = finalWorld4 + " world";
12 
13     System.out.println(hw == hw1);//false
14     System.out.println(hw == hw2);//true
15     System.out.println(hw == hw3);//false
16     System.out.println(hw == hw4);//true

为什么是这个结果呢?有关参考:https://blog.csdn.net/linbilin_/article/details/51840089 

 http://www.mamicode.com/info-detail-2370655.html

1 //字符数组转字符串
2 String s = "abcdefg";
3 char[] cs = s.toCharArray();
4 return new String(cs);

 

equal源码:

 

 

 

 1 /**
 2          * 这种方法会产生很多的中间变量,例如拼接这个数组
 3          * 会产生1234,123456等等中间变量
 4          * 当数组中元素有几万个的时候,则会产生好多好多好多中间变量捏
 5          * 故因此有了StringBuffer,StringBuilder
 6          * */
 7         String[] str_arr = {"12","34","56","78"};
 8         String str = "";
 9         for(int i = 0 ; i < str_arr[i].length() ; i++) {
10             str += str_arr[i];
11         }

 

 1 //StringBuffer(线程安全 慢)&&StringBuilder
 2         //采用append方法追加
 3         /**
 4          * StringBuffer就是我们用一个Buffer把所有的要追加的字符串存入一个数组中
 5          * 当这个数组空间不够的时候就进行扩容
 6          * 扩容刚开始Buffer默认长度是16
 7          * 扩容就是当发现我们空间不够的时候
 8          * 刚开始这个Sb,Sf不太大的时候,乘2就可以很大的扩容
 9          * 扩容的源码是int newCapacity = (value.length << 1) + 2;
10          * 如果传入的值是0,左移操作结果还是0,出于安全性考虑给他最后+2
11          * 如果这个还不够的话,那么你需要多大我就给你多大
12          * 最后把这个数组调用toString方法转化成字符串
13          */
14         str_arr = new String[]{"12","34","56","78"};
15         StringBuffer stringBuffer = new StringBuffer();
16         for(int i = 0 ; i < str_arr.length ; i++) {
17             stringBuffer.append(str_arr[i]);
18         }
19         System.out.println(stringBuffer.toString());
20         

 

 

 

  • 引用类型的默认值

//所有引用类型的默认值都是null
//char 是\u0000 是一个UniCode码,是一个不可显字符,还是空
//null也是一个值,是一个空间,这个空间里什么都没有

1         //arraycopy(原数组,原数组起始位置,目标数组,目标数组起始位置,复制多大) 
2         //数组扩容 
3         //不是真正的扩容,是将原数组的内容放到更大的数组中 
4         int[] arr= {1,2,3,4,5,6,7,8,9};
5         int[] new_arr = new int[20];
6         System.arraycopy(arr, 0, new_arr, 3, arr.length);
7         System.out.println(Arrays.toString(new_arr));

 

 

  • 方法
1 //方法
2         //声明一个方法,接收一个整数
3         //返回一个长度为该整数的整数类型数组
4         int[] nums = shuzu(Math.random()*20);
5         System.out.println(Arrays.toString(nums));
1 public static int[] shuzu(double number) {
2         
3         if(number < 0)
4             return null;
5         int[] nums = new int[(int)number];
6         return nums;
7     }

 

 

 

作业:

 1 //声明一个方法,接受一个数组(整数),返回这个数组中的最大值
 2 //声明一个方法,接收两个字符串,返回小串是否是大串的子串
 3 //声明一个方法,接受一个字符串,返回这个字符串的所有子串
 4 //判断一个正整数是不是回文数
 5     public static void main(String[] args) {
 6         int[] arr= {1,2,3,4,5,6,7,8,9};
 7         System.out.println(MaxNum(arr));
 8         
 9         String str1 = "123456789";
10         String str2 = "234";
11         System.out.println(StringCompare(str1, str2));
12         
13         System.out.println(Arrays.toString(isSubString(str1)));
14         
15         int[] nums = new int[]{1,2,3,3,2,1};
16         System.out.println(HuiWen(nums));
17         
18     }
19     
20     public static int MaxNum(int[] nums) {
21         int max = nums[0];
22         for(int i = 0 ; i < nums.length ; i++) {
23             max = max > nums[i] ? max : nums[i];
24         }
25         return max;
26     }
27     
28     public static boolean StringCompare(String str1 , String str2) {
29         if(str1.indexOf(str2) == -1)
30             return false;
31         else
32             return true;
33     }
34     
35     public static String[] isSubString(String str) {
36         String[] value = str.split("");
37         String[] strings = new String[(value.length + value.length * value.length) / 2];
38         int count = 0;
39         for(int i = 1 ; i <= value.length ; i++) {//截取长度为i的子串
40             for(int j = 0 ; j <= value.length - i; j++) {//长度为i的子串共有j = n - i个
41                 String tempString = "";
42                 for(int k = j ; k < i + j ; k++) {//找到长度为k的子串
43                     tempString += value[k];
44                 }
45                 strings[count++] = tempString;
46             }
47         }    
48         return strings;
49     }
50     
51     public static boolean HuiWen(int[] nums) {
52         if(nums.length == 0) return false;
53         else if(nums.length == 1) return true;
54         else {
55             int half_length = nums.length / 2;
56             for(int i = 0 , j = nums.length - 1 ; i < half_length ; i++ , j--) {
57                 if(nums[i] != nums[j]) {
58                     return false;
59                 }
60             }
61         }
62         return true;
63     }
64 }

 

posted @ 2022-01-12 13:55  Nickeyhu  阅读(204)  评论(0编辑  收藏  举报