zoukankan      html  css  js  c++  java
  • 数组

    1.数组的理解:数组(Array),是多个相同类型是数据一定顺序排列的集合,并使用一个名字命名,并通过编号的方式对这些数据进行统一管理.

    2.数组的相关的概念:

    1. 数组名
    2. 元素
    3. 角标 、下标 、索引
    4. 数组的长度 : 元素的个数

    3.数组的特点:

    1.  数组是序排列的
    2. 数组属于引用数据类型的变量。数组的元素,既可以是基本数据类型,也可以是引用数据类型
    3. 创建数组对象会在内存中开辟一整块连续的空间
    4. 数组的长度一旦确定,就不能修改。

    4. 数组的分类:

    1.  照维数:一维数组、二维数组、。。。
    2. 照数组元素的类型:基本数据类型元素的数组、引用数据类型元素的数组

    数据结构:
      1.数据与数据之间的逻辑关系:集合、一对一、一对多、多对多
      2.数据的存储结构:
    线性表:顺序表(比如:数组)、链表、栈、队列
    树形结构:二叉树
    图形结构:

    算法:
    排序算法:
    搜索算法:

    public class ArrayUtilsTest {
    
        /*
         *  2. 求数值型数组中元素的最大值、最小值、平均数、总和等
    
            3. 数组的复制、反转、查找(线性查找、二分法查找(了解))
            
            4. 数组元素的排序算法
    
         */
        public static void main(String[] args) {
            
            int[] numbers = new int[]{10,20,30,15,16,19};
            //求数组中的最大值
            int maxNumber = numbers[0];//记录第一个元素的数据
            //循环numbers中所有的元素
            for (int i = 1; i < numbers.length; i++) {
                if(maxNumber < numbers[i]){
                    //记录该值
                    maxNumber = numbers[i];
                }
            }
            System.out.println("maxNumber=" + maxNumber);
            
            System.out.println("---------------------总和,平均数----------------------");
            
            int sum = 0; //用来记录总和
            for (int i = 0; i < numbers.length; i++) {
                sum += numbers[i];
            }
            System.out.println("sum=" + sum + " 平均数=" + sum / numbers.length);
            
            System.out.println("---------------------复制----------------------");
            
            //创建一个数组,长度和numbers的长度一样
            int[] copyNumber = new int[numbers.length];
            //for循环-将numbers中的数据赋值到copyNumber中
            for (int i = 0; i < copyNumber.length; i++) {
                copyNumber[i] = numbers[i];
            }
            
            System.out.println("----------------copyNumber------------------");
            //修改copyNumber中的值
            copyNumber[0] = 100;
            for (int i = 0; i < copyNumber.length; i++) {
                System.out.print(copyNumber[i] + " ");
            }
            System.out.println();
            System.out.println("----------------numbers------------------");
            for (int i = 0; i < numbers.length; i++) {
                System.out.print(numbers[i] + " ");
            }
            System.out.println();
        }
    }

    数组反转

    /*
         数组的反转
     */
    public class ArrayUtilsTest2 {
    
        public static void main(String[] args) {
            
            int[] numbers = new int[]{10,20,30,15,16,19};
            
            /*
            //第一种方式:创建新的数组
            int[] reverseNumber = new int[numbers.length];
            //将numbers中的数据从后向前进行遍历
            for(int i = numbers.length - 1;  i >= 0; i--){
                 reverseNumber[numbers.length - 1 - i] = numbers[i];
            }
            //遍历reverseNumber
            for (int i = 0; i < reverseNumber.length; i++) {
                System.out.print(reverseNumber[i] + " ");
            }
            */
            System.out.println();
            System.out.println("-----------------------------------------------------");
            
            //第二种方式 : 直接将numbers中的数据进行反转
            
            for(int i = 0, j = numbers.length - 1; i < numbers.length / 2; i++,j--){
                int temp = numbers[i];
                numbers[i] = numbers[j];
                numbers[j] = temp;
            }
            
            //遍历数组中的元素
            for (int i = 0; i < numbers.length; i++) {
                System.out.print(numbers[i] + " ");
            }
        }
    }

    数组线性查找

    /*
         线性查找、二分法查找(了解))
     */
    public class ArrayUtilsTest3 {
    
        public static void main(String[] args) {
            
            int[] numbers = new int[]{10,20,30,15,16,19,30};
            
            int findNumber = 30; //要查找的数值
            
            int index = -1; //用来记录查找到的数值的索引位置
            
            for (int i = 0; i < numbers.length; i++) {
                
                if(findNumber == numbers[i]){
                    index = i;
                    break;//不考虑有多个,找到一个就结束
                }
            }
            
            //判断是否找到了需要查找数据
            if(index == -1){//没找到
                System.out.println("亲!!没找到您需要的数据哦");
            }else{
                System.out.println("您要查找的数值在" + index + "索引位置上");
            }
        }
    }

    冒泡排序

    /*
         冒泡排序
     */
    public class BubbleSort {
    
        public static void main(String[] args) {
            
            int[] numbers = new int[]{10,20,30,15,16,19};
            
            //控制比较几轮
            for (int i = 0; i < numbers.length - 1; i++) {
                
                //控制比较的次数
                for(int j = 0; j < numbers.length - 1 - i; j++){
                    
                    //判断是否进行交换
                    if(numbers[j] > numbers[j + 1]){
                        //交换
                        int temp = numbers[j];
                        numbers[j] = numbers[j + 1];
                        numbers[j + 1] = temp;
                    }
                    
                }
            }
            
            //遍历数组中的内容
            for (int i = 0; i < numbers.length; i++) {
                System.out.print(numbers[i] + " ");
            }
        }
    }
  • 相关阅读:
    flume sink两种类型 file_rool 自定义sing com.mycomm.MySink even if there is only one event, the event has to be sent in an array
    为什么引入进程20年后,又引入线程?
    As of Flume 1.4.0, Avro is the default RPC protocol.
    Google Protocol Buffer 的使用和原理
    Log4j 2
    统一日志 统一订单
    网站行为跟踪 Website Activity Tracking Log Aggregation 日志聚合 In comparison to log-centric systems like Scribe or Flume
    Percolator
    友盟吴磊:移动大数据平台的架构、实践与数据增值
    Twitter的RPC框架Finagle简介
  • 原文地址:https://www.cnblogs.com/zmy-520131499/p/11074942.html
Copyright © 2011-2022 走看看