>
快捷搜索:

Java基础之LinkedList源码深入分析,直接插入排序

- 编辑:皇家国际app -

Java基础之LinkedList源码深入分析,直接插入排序

  • 直接插入排序是将未排序的数目插入至已排好序类别的至极岗位

动用机械漏刻时,安插到四个节点,共同访谈二个库,导致职务再一次实行,然后想到了应用redis来兑现锁原理.

  • 行使递归与分治技巧将数据连串划分成更加小的半子表,在对半子表排序,最后再用递归方法将排好序的半子表合併成更大的稳步连串
  • Java基础之HashMap源码深入分析
  • Java基础之LinkedHashMap源码深入分析
  • Java基础之HashTable源码剖判
  • Java基础之LinkedList源码深入分析
  • HashSet和LinkedHashSet
  • Java基础之HashMap源码剖判
  • Java基础之LinkedHashMap源码分析
  • Java基础之HashTable源码分析
  • Java基础之ArrayList源码深入分析
  • HashSet和LinkedHashSet

直接插入排序例子

  • 流程:

    • 先是比较数组的前多个数据,并排序
    • 正如第三个要素与前五个排好序的多寡,并将第三个成分归入适合的数量的地方 - 相比较第七个因素与前七个排好序的数量,并将第多少个要素放入适合的数量的职责
  • 举例:

    • 万一数组如下
    25 11 45 26 12 78
    • 先是趟排序:比较 25 11,地点沟通
    11 25 45 26 12 78
    • 其次趟排序:45 大于 11 25,地点不改变
    • 其三趟排序:26 大于 11 25,小于 45,将其插入 25 和 45 之间
    11 25 26 45 12 78
    • ........
import org.springframework.dao.DataAccessException;import org.springframework.data.redis.connection.RedisConnection;import org.springframework.data.redis.core.RedisCallback;import org.springframework.data.redis.core.RedisTemplate;import org.springframework.data.redis.serializer.RedisSerializer;import java.util.concurrent.TimeUnit;/** * 通过redis实现对于分布式的环境下的并发管理(通过redis锁实现并发处理) */public class RedisDistributionLock implements DistributionLock { private long lockTimeout; private final RedisTemplate<String, RedisLockObject> redisTemplate; private final String lockKey; private final RedisSerializer keyRedisSerializer; private final RedisSerializer valueRedisSerializer; public RedisDistributionLock(RedisTemplate<String, RedisLockObject> redisTemplate, String key, long timeout) { this.redisTemplate = redisTemplate; this.lockTimeout = timeout; this.lockKey = key; this.keyRedisSerializer = redisTemplate.getKeySerializer(); this.valueRedisSerializer = redisTemplate.getValueSerializer(); } //尝试获取一次锁 public synchronized boolean tryLock() { long currentTime = System.currentTimeMillis(); Long lock_timeout = currentTime + lockTimeout; if (redisTemplate.execute(new LockRedisCallBack(this.lockKey, lock_timeout))) { redisTemplate.expire(lockKey, lockTimeout, TimeUnit.MILLISECONDS); return true; } else { RedisLockObject redisLockObject = null; try { Object object = redisTemplate.opsForValue().get; if (object != null) { redisLockObject = (RedisLockObject) redisTemplate.opsForValue().get; } } catch (Exception err) { redisTemplate.delete; err.printStackTrace(); } if (redisLockObject != null && (redisLockObject.getTimeout() < currentTime)) { long oldTimeout = redisLockObject.getTimeout(); redisLockObject.setTimeout(lockTimeout); RedisLockObject oldRedisLockObject = (RedisLockObject) redisTemplate.opsForValue().getAndSet(lockKey, redisLockObject); if (oldRedisLockObject != null && oldRedisLockObject.getTimeout() == oldTimeout) { redisTemplate.expire(lockKey, lockTimeout, TimeUnit.MILLISECONDS); return true; } } } return false; } /** * 加锁 取到锁加锁,取不到锁就返回 * * @return */ @Override public synchronized long lock() { while  { if ) { return System.currentTimeMillis() + lockTimeout; } try { Thread.sleep; } catch (Exception err) { err.printStackTrace(); } } } /** * 解锁 */ @Override public synchronized void unlock() { RedisLockObject redisLockObject = (RedisLockObject) redisTemplate.opsForValue().get; if (redisLockObject != null) { redisTemplate.delete; } } @SuppressWarnings("rawtypes") private class LockRedisCallBack implements RedisCallback<Boolean> { private long timeOut; public LockRedisCallBack(String key, long timeOut) { this.timeOut = timeOut; } @SuppressWarnings("unchecked") @Override public Boolean doInRedis(RedisConnection connection) throws DataAccessException { RedisLockObject redisLockObject = new RedisLockObject(); redisLockObject.setTimeout; byte[] value = valueRedisSerializer.serialize(redisLockObject); byte[] key = valueRedisSerializer.serialize; return connection.setNX(key, value); } }}

public interface DistributionLock { public long lock(); public void unlock();}

直接插入排序例子

  • 流程:

    • 解释: 把待排序的 n 个要素的队列分解成七个子体系, 各个子系列包涵n/2 个成分
    • 治水: 对每种子类别分别调用归并排序 MergeSort
    • 联合: 合併三个排好序的子种类,生成排序结果
  • 举例:

    图片 1Java基础之LinkedList源码深入分析,直接插入排序。归并排序

本文由皇家国际app发布,转载请注明来源:Java基础之LinkedList源码深入分析,直接插入排序