数组中常见的算法、线程方法、可用状态、创建线程的四种方式、jQuery初步增删改查、Java用switch干掉多个if else、静态与非静态属性及方法?理解static静态方法及其使用。

简介: 数组中常见的算法​1、数组中常见的算法

数组中常见的算法

1、数组中常见的算法

1 元素赋值—》杨辉三角

2 求数组元素中最大值、最小值、平均值、总和等

3 数组的复制、查找、反转

4 排序算法

直接选择排序 堆排序

冒泡排序 快速排序

插入排序。。

归并排序

。。。

5 冒泡排序—》比较两个相邻的元素—》大小比较

N个数字要排序完成,总共进行N-1趟排序,每i趟的排序次数为(N-i)次

—》a.length - 1

—》每i趟----a.length - 1 - i冒泡排序总的平均时间复杂度为:O(n^2) —>n*n


package com.mb;public class mb { public static void main(String[] args) { int[] a = new int[]{12,-43,234,32,43,45,332,3,4}; for (int i = 0; i < a.length - 1; i++){ for (int j = 0; j < a.length - 1 - i; j++){ if (a[j] > a[j+1]){ int t = a[j]; a[j] = a[j + 1]; a[j + 1] = t; } } } for(int i = 0;i <a.length; i++){ System.out.print(a[i]+" "); } }}

结果:


-43 3 4 12 32 43 45 234 332

线程方法、可用状态、创建线程的四种方式

常用方法


run()是线程的核心方法,相当于主线程的main方法,是每个线程的入口


start()开始执行,创建线程


sleep是睡眠,进入阻塞状态


Thread.yield()方法作用:暂停当前正在执行的线程对象,并执行其他线程。


wait()使当前线程阻塞,前提是 必须先获得锁,一般配合synchronized 关键字使用,即,一般在synchronized 同步代码块里使用 wait()、notify/notifyAll() 方法。


notify/notifyAll() 方法起着唤醒睡着的线程作用,这两个的区别在与一个与全部的区别


线程几种可用状态


1、新建(new)


2、可运行(runnable)


3、运行(running)


4、阻塞(block)


5、死亡(dead)


(有版本有六种状态 等待 wait 获取锁wait notify通知激活等待状态)


实现线程的不同方式


1、extends Thread


2、implements Runnable


以上两种的区别是实现Runnable接口避免了多继承的局限


以及可以更好的体现共享的思想


3、implements Callable


核心的方法: call() -----》有返回值


相比较前两种创建线程的方式,实现Callable接口


方法可以去抛出异常,还支持泛型<>的返回,需要借助FutureTask类,比如获取返回值。


4、通过线程池的方式


经常创建和销毁、使用量特别大的资源,比如并发使用的线程对性能影响大


线程池:


提前创建好多个线程,放到线程池中,想要用的话拿出来用就好了,用完后放回去,好比一个公共场所吧,不要每一家建一个自己私人花园,这样城市面积不够,而直接在小区建一个公园,大家都可以循环使用,重复使用,这样可以节约资源,同样提高生活的效率,每家每户建个花园太慢了,最后是方便进行管理,对公共公园进行增删改查比较方便管理。


package com.sp.practice.xc.java1;


import java.util.concurrent.ExecutorService;

import java.util.concurrent.Executors;


class One implements Runnable{

@Override
public void run() {
  for (int i = 0;i <= 10; i++){
    if(i % 2 == 0){
      System.out.println(Thread.currentThread().getName()+":"+i);
    }
  }
}

}

class Two implements Runnable{

@Override
public void run() {
  for (int i = 0; i <= 10; i++){
    if(i % 2 != 0){
      System.out.println(Thread.currentThread().getName()+":"+i);
    }
  }
}

}

public class ThreadPoolDemo {

public static void main(String[] args) {

//1 提稿之sing线程数量的线程池

ExecutorService service = Executors.newFixedThreadPool(10);

  //设置线程池的属性
  System.out.println(service.getClass());
  //2 执行执行的线程操作,需要提供实现Runnable接口或接口实现类的对象
  service.execute(new One());
  service.execute(new Two());
  //3、关闭线程池
  service.shutdown();
}

结果

class java.util.concurrent.ThreadPoolExecutor
pool-1-thread-1:0
pool-1-thread-1:2
pool-1-thread-1:4
pool-1-thread-1:6
pool-1-thread-1:8
pool-1-thread-1:10
pool-1-thread-2:1
pool-1-thread-2:3
pool-1-thread-2:5
pool-1-thread-2:7
pool-1-thread-2:9

jQuery初步增删改查

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org/">
<head>
    <meta charset="UTF-8">
    <title>Students</title>
    <base th:href="${#servletContext.getContextPath+'/'}">
    <script src="jquery-1.7.2.js"></script>
    <script type="text/javascript">
        $(function () { //$(document).ready(function(){
            //delete
            function deleteStudents() {
                var name = $(this).parents("tr").find("td:eq(1)").text();
                var flag = confirm("你确定要删除"+name+"嘛??");
                if(flag){
                    $(this).parents("tr").remove();
                }
                return false;
            }
            $(".del").on("click",deleteStudents);//带():执行,不带():赋值
            //update
            function updateStudents() {
                //找同类的父类
                $(this).parent().siblings("td").each(function () {
                    {
                        var is_text = $(this).find("input:text");
                        if(!is_text.length){
                            $(this).html("<input size='13' type='text' value='"+$(this).text()+"'/>" );
                        }else{
                            $(this).html(is_text.val());
                        }
                    }
                })
            }
            $(".upd").on("click",updateStudents);
            //add
            function addStudents() {
                //获取提交的元素
                var id = $("#addId").val();
                var name = $("#addName").val();
                var age = $("#addAge").val();
                $("<tr></tr>").append("<td>"+id+"</td>")
                    .append("<td>"+name+"</td>")
                    .append("<td>"+age+"</td>")
                    .append("<td><a href=‘#'>Delete </a>" +
                        "<a href=‘#'>Update</a> </td>")
                    .appendTo("#tab1");
            }
            $("#addSubmit").on("click",addStudents);
        })
    </script>
</head>
<body>
<h2 align="center">Students</h2>
<table id="tab1" align="center" border="1" cellspacing="0">
    <tr>
        <th>id</th>
        <th>name</th>
        <th>age</th>
        <th colspan="2">operate</th>
    </tr>
    <tr>
        <td>13</td>
        <td class="name">dongji</td>
        <td>16</td>
        <td>
            <a href="#" class="del">Delete</a>
            <a href="#" class="upd">Update</a>
        </td>
    </tr>
    <tr>
        <td>14</td>
        <td class="name">shangji</td>
        <td>16</td>
        <td>
            <a href="#" class="del">Delete</a>
            <a href="#" class="upd">Update</a>
        </td>
    </tr>
    <tr>
        <td>19</td>
        <td class="name">hengji</td>
        <td>16</td>
        <td>
            <a href="#" class="del">Delete</a>
            <a href="#" class="upd">Update</a>
        </td>
    </tr>
</table>
<div id="div1">
    <h3 align="center">Add Students</h3>
    <table id="ta2" align="center" border="1" cellspacing="0">
        <tr>
            <td>id:</td>
            <td><input type="text" id="addId"/> </td>
        </tr>
        <tr>
            <td>name:</td>
            <td><input type="text" id="addName"/> </td>
        </tr>
        <tr>
            <td>age:</td>
            <td><input type="text" id="addAge"/> </td>
        </tr>
        <tr>
            <td colspan="2" align="center">
                <button id="addSubmit">submit</button>
            </td>
        </tr>
    </table>
</div>
</body>
</html>

结果


Java用switch干掉多个if else

你可以理解switch的出现是为了干掉多个if else

实际上,它的功能可转化为if else

switch(expression){
    case value :
       //语句
       break; //可选
    case value :
       //语句
       break; //可选
    //你可以有任意数量的case语句
    default : //可选
       //语句
}

并且 enum枚举有一个特别实用的特性,他可以在switch语句内使用。这是一个绝佳的组合。

简洁(想一下如果是if else去写会是什么样的)

private void TestEnum(ColorType type){
        switch (type){
            case GREEN:
                break;
            case RED:
                break;
            case ORANGE:
                break;
            case WHITE:
                break;
            case BLACK:
                break;
            default:
        }
    }

静态与非静态属性及方法?理解static静态方法及其使用。

1、静态与非静态属性及方法成员变量:

在方法体外,类体内声明

局部变量:

在方法体内部声明的变量

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wrhRPl5X-1663945893795)(1)]

2、

        类变量    实例变量
    类    Y    N
    对象    Y    Y
```    
不能用类来访问实例变量
静态属性举例:System.out
        静态方法    非静态方法
    类    Y    N
    对象    Y    Y
不能用类调用非静态方法
应是类.静态方法
总结:静态static方法中,只能调用静态方法的属性
而非静态方法(一般方法) ,可以---》静态
也可以---》非静态
---》回答了为什么要用静态方法
3、java中所说的类方法和静态方法一样吗?
不一样的
类中 普通的方法 需要 new 类()后能才能调用
而静态方法 不需要new 也就是不需要实例 就可以直接调用
4、static
不能使用this,super
5、什么时候要用静态?
1 属性声明static
属性共享---》多个对象
2 方法用static修饰
静态属性
或工具方法---》要被别人去调用
相关文章
|
10天前
|
安全 Java 测试技术
Java并行流陷阱:为什么指定线程池可能是个坏主意
本文探讨了Java并行流的使用陷阱,尤其是指定线程池的问题。文章分析了并行流的设计思想,指出了指定线程池的弊端,并提供了使用CompletableFuture等替代方案。同时,介绍了Parallel Collector库在处理阻塞任务时的优势和特点。
|
6天前
|
安全 Java 开发者
深入解读JAVA多线程:wait()、notify()、notifyAll()的奥秘
在Java多线程编程中,`wait()`、`notify()`和`notifyAll()`方法是实现线程间通信和同步的关键机制。这些方法定义在`java.lang.Object`类中,每个Java对象都可以作为线程间通信的媒介。本文将详细解析这三个方法的使用方法和最佳实践,帮助开发者更高效地进行多线程编程。 示例代码展示了如何在同步方法中使用这些方法,确保线程安全和高效的通信。
25 9
|
5天前
|
Java
java switch case多个条件
通过本文的介绍,我们详细探讨了Java中 `switch case`语句的多种用法和优化方法。从基本语法到合并多个条件,再到使用枚举、常量和函数优化,`switch case`语句在Java编程中提供了一种灵活且高效的控制流方式。掌握这些技巧,能够编写出更加简洁、可读性强的代码,提高开发效率和代码质量。希望本文能为您在实际开发中提供有价值的参考和指导。
17 2
|
9天前
|
存储 安全 Java
Java多线程编程的艺术:从基础到实践####
本文深入探讨了Java多线程编程的核心概念、应用场景及其实现方式,旨在帮助开发者理解并掌握多线程编程的基本技能。文章首先概述了多线程的重要性和常见挑战,随后详细介绍了Java中创建和管理线程的两种主要方式:继承Thread类与实现Runnable接口。通过实例代码,本文展示了如何正确启动、运行及同步线程,以及如何处理线程间的通信与协作问题。最后,文章总结了多线程编程的最佳实践,为读者在实际项目中应用多线程技术提供了宝贵的参考。 ####
|
6天前
|
监控 安全 Java
Java中的多线程编程:从入门到实践####
本文将深入浅出地探讨Java多线程编程的核心概念、应用场景及实践技巧。不同于传统的摘要形式,本文将以一个简短的代码示例作为开篇,直接展示多线程的魅力,随后再详细解析其背后的原理与实现方式,旨在帮助读者快速理解并掌握Java多线程编程的基本技能。 ```java // 简单的多线程示例:创建两个线程,分别打印不同的消息 public class SimpleMultithreading { public static void main(String[] args) { Thread thread1 = new Thread(() -> System.out.prin
|
9天前
|
Java
JAVA多线程通信:为何wait()与notify()如此重要?
在Java多线程编程中,`wait()` 和 `notify()/notifyAll()` 方法是实现线程间通信的核心机制。它们通过基于锁的方式,使线程在条件不满足时进入休眠状态,并在条件满足时被唤醒,从而确保数据一致性和同步。相比其他通信方式,如忙等待,这些方法更高效灵活。 示例代码展示了如何在生产者-消费者模型中使用这些方法实现线程间的协调和同步。
24 3
|
8天前
|
安全 Java
Java多线程集合类
本文介绍了Java中线程安全的问题及解决方案。通过示例代码展示了使用`CopyOnWriteArrayList`、`CopyOnWriteArraySet`和`ConcurrentHashMap`来解决多线程环境下集合操作的线程安全问题。这些类通过不同的机制确保了线程安全,提高了并发性能。
|
9天前
|
Java
java小知识—进程和线程
进程 进程是程序的一次执行过程,是系统运行的基本单位,因此进程是动态的。系统运行一个程序即是一个进程从创建,运行到消亡的过程。简单来说,一个进程就是一个执行中的程序,它在计算机中一个指令接着一个指令地执行着,同时,每个进程还占有某些系统资源如CPU时间,内存空间,文件,文件,输入输出设备的使用权等等。换句话说,当程序在执行时,将会被操作系统载入内存中。 线程 线程,与进程相似,但线程是一个比进程更小的执行单位。一个进程在其执行的过程中产生多个线程。与进程不同的是同类的多个线程共享同一块内存空间和一组系统资源,所以系统在产生一个线程,或是在各个线程之间做切换工作时,负担要比
20 1
|
9天前
|
Java UED
Java中的多线程编程基础与实践
【10月更文挑战第35天】在Java的世界中,多线程是提升应用性能和响应性的利器。本文将深入浅出地介绍如何在Java中创建和管理线程,以及如何利用同步机制确保数据一致性。我们将从简单的“Hello, World!”线程示例出发,逐步探索线程池的高效使用,并讨论常见的多线程问题。无论你是Java新手还是希望深化理解,这篇文章都将为你打开多线程的大门。
|
10天前
|
安全 Java 编译器
Java多线程编程的陷阱与最佳实践####
【10月更文挑战第29天】 本文深入探讨了Java多线程编程中的常见陷阱,如竞态条件、死锁、内存一致性错误等,并通过实例分析揭示了这些陷阱的成因。同时,文章也分享了一系列最佳实践,包括使用volatile关键字、原子类、线程安全集合以及并发框架(如java.util.concurrent包下的工具类),帮助开发者有效避免多线程编程中的问题,提升应用的稳定性和性能。 ####
37 1

热门文章

最新文章