精华内容
下载资源
问答
  • 原理:将已登录用户保存在数据库或者...如果已登录,则取出其session然后将登陆账号idsession里移除 在过滤器里进行登录与否的判断 下面是一些详细步骤: 1、登录页面 login.jsp <%@ page langu...

    原理:将已登录用户保存在数据库或者application或静态List(Map)里,

    主要保存 session对象,登录账号id 等

    每一个用户进行登录时去查看是否已经登陆过,

    如果已登录,则取出其session然后将登陆账号id从session里移除

     

    在过滤器里进行登录与否的判断

    下面是一些详细步骤:

    1、登录页面  login.jsp

    <%@ page language="java" contentType="text/html; charset=utf-8"
        pageEncoding="utf-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>Insert title here</title>
    </head>
    <body>
    <center>
    <h1>用户登录</h1>
    <hr>
    <form action="LoginServlet">
    <table>
    <tr><th>  用户名:</th><td><input type="text" name="username"/></td></tr>
    <tr><th>   密码:</th><td> <input type="password" name="password"/></td></tr>
    <tr><td></td><td> <input type="submit" value="登录"></td></tr>
    </table> 
    <br>
    <br>
    </form>
    </center>
    
    </body>
    </html>

    2、main_frame.jsp 登录成功后的主页面

    <%@ page language="java" contentType="text/html; charset=utf-8"
        pageEncoding="utf-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>Insert title here</title>
    </head>
    <body>
        <%  String name = (String)request.getSession().getAttribute("username");  
             %>  
            
    欢迎你,<%=name%> 
    
    <a href="ManyServlet">操作一下</a>
    </body>
    
    
    </html>

    3、session过期(未登陆)的页面 session.jsp

    <%@ page language="java" contentType="text/html; charset=utf-8"
        pageEncoding="utf-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>Insert title here</title>
    </head>
    <body>
    会话已过期
    </body>
    <script type="text/javascript">
    setTimeout(function (){
        window.location.href = "${pageContext.request.contextPath}/login.jsp";
        window.close();
    }, 2000);
    </script>
    </html>

    4、被踢下线的页面 multisession.jsp

    <%@ page language="java" contentType="text/html; charset=utf-8"
        pageEncoding="utf-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>Insert title here</title>
    </head>
    <body>
    你的账号在别处登录,你已被迫下线。
    </body>
    <script type="text/javascript">
    setTimeout(function (){
        window.location.href = "<%=request.getContextPath()%>/login.jsp";
    }, 2000);
    </script>
    </html>

     

    5、进行登录的servlet

    package session;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.util.HashMap;
    import java.util.Map;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;
    
    
    /**
     * Servlet implementation class LoginServlet
     */
    public class LoginServlet extends HttpServlet {
        private static final long serialVersionUID = 1L;
        private Map<String, HttpSession> userMap = new HashMap<String, HttpSession>();
           
        /**
         * @see HttpServlet#HttpServlet()
         */
        public LoginServlet() {
            super();
            // TODO Auto-generated constructor stub
        }
    
        /**
         * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
         */
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
            String username = request.getParameter("username");
            String password = request.getParameter("password");
            HttpSession session = request.getSession();
            request.getSession().setAttribute("username", username);
            if(!userMap.containsKey(username))
            {
                System.out.println("新的会话ID:"+session.getId());
                userMap.put(username, session);
            }else {
                HttpSession session2 = userMap.get(username);
                if(!session2.getId().equals(session.getId()))
                {
                    System.out.println("新的会话ID:"+session.getId());
                    System.out.println("session已失效");
                    System.out.println("已失效Id:" + session2.getId());
                     session2.removeAttribute("username");
                     session2.setAttribute("usermsg", "yes");
                    userMap.put(username, session);
                }
          
            }
            String url = "main_frame.jsp";
            response.sendRedirect(url);
           
            
        }
    
        /**
         * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
         */
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            // TODO Auto-generated method stub
            doGet(request, response);
        }
    
    }

    6、过滤器 SessionFilter.java

    package filter;
    
    import java.io.IOException;
    import java.util.StringTokenizer;
    
    import javax.servlet.Filter;
    import javax.servlet.FilterChain;
    import javax.servlet.FilterConfig;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;
    
    import com.utils.SysUtils;
    
    
    /**
     * Servlet Filter implementation class SessionFilter
     */
    public class SessionFilter implements Filter {
    
        protected boolean ignore = false;                    //忽略
        protected String noFilterPath;              //不过滤的路径
        protected String sessionTimeoutPage;        //Session过期转向的页面
        /**
         * Default constructor. 
         */
        public SessionFilter() {
            // TODO Auto-generated constructor stub
        }
    
        /**
         * @see Filter#destroy()
         */
        public void destroy() {
            // TODO Auto-generated method stub
        }
    
        /**
         * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
         */
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
            // TODO Auto-generated method stub
            // place your code here
    
            // pass the request along the filter chain
            
           if(this.ignore)
        {
            chain.doFilter(request, response);
            return;
        }
            
            HttpServletRequest req = (HttpServletRequest) request;
            HttpServletResponse resp= (HttpServletResponse) response;
            HttpSession session = req.getSession();
            
            String username = (String) session.getAttribute("username");
            boolean isLogin = username!=null;
            
           
            if(!isLogin)
            {
                String servletPath = req.getServletPath(); //当前服务端路径
                if(!isMatchPath(noFilterPath, servletPath)) //如果不匹配则转到Login页面
                {
                    String url = req.getRequestURI() + (req.getQueryString() != null ? "?" + req.getQueryString() : "");
                        if(session.getAttribute("usermsg")!= null&&!session.getAttribute("usermsg").equals("") )
                        {
                            resp.sendRedirect(req.getContextPath()+"/multisession.jsp");
                            return;
                        }
                        resp.sendRedirect(req.getContextPath()+"/session.jsp");
                        System.out.println("Session is timeout. 地址为:" + url);
                        return;
                  
                }
                
                
            }
            chain.doFilter(request, response);
        }
    
        /**
         * @see Filter#init(FilterConfig)
         */
        public void init(FilterConfig fConfig) throws ServletException {
            // TODO Auto-generated method stub
            this.ignore = "true".equalsIgnoreCase(fConfig.getInitParameter("ignore"));
            this.noFilterPath = fConfig.getInitParameter("noFilterPath");
        }
        /**
         * 是否匹配过虑路径
         *
         * @param filterPath 过滤路径
         * @param path       访问的地址
         * @return 匹配返回true,否则返回false
         */
        public boolean isMatchPath(String filterPath, String path)
        {
        /*    StringTokenizer token = new StringTokenizer(filterPath, path);
            while(token.hasMoreTokens())
            {
                String patter = SysUtils.trim(token.nextToken());
                boolean match = SysUtils.wildcardMatch(patter, path);
                if(match)
                {
                  return true;  
                }
            }
            return false;*/
            if(filterPath.contains(path))
            {
                return true;
            }
            return false;
        }
    
    }

    7、进行额外业务servlet    ManyServlet.java

    package session;
    
    import java.io.IOException;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    /**
     * Servlet implementation class ManyServlet
     */
    public class ManyServlet extends HttpServlet {
        private static final long serialVersionUID = 1L;
           
        /**
         * @see HttpServlet#HttpServlet()
         */
        public ManyServlet() {
            super();
            // TODO Auto-generated constructor stub
        }
    
        /**
         * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
         */
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            // TODO Auto-generated method stub
            System.out.println("业务逻辑哈哈");
            String url = "haha.jsp";
            response.sendRedirect(url);
        }
    
        /**
         * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
         */
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            // TODO Auto-generated method stub
            doGet(request, response);
        }
    
    }

     

    对应的jsp haha.jsp

    <%@ page language="java" contentType="text/html; charset=utf-8"
        pageEncoding="utf-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>Insert title here</title>
    </head>
    <body>
    嘿,你好。
    </body>
    </html>

    web.xml 中fileter的配置

      <filter>
        <filter-name>SessionFilter</filter-name>
        <filter-class>filter.SessionFilter</filter-class>
        <init-param>
          <param-name>ignore</param-name>
          <param-value>false</param-value>
        </init-param>
        <init-param>
          <param-name>sessionTimeoutPage</param-name>
          <param-value>/error.jsp</param-value>
        </init-param>
         <init-param>
                <param-name>noFilterPath</param-name>
                <param-value>/login.jsp, /LoginServlet, /session.jsp, /multisession.jsp, /index.jsp
                </param-value>
            </init-param>
      </filter>
      <filter-mapping>
        <filter-name>SessionFilter</filter-name>
        <url-pattern>*.jsp</url-pattern>
      </filter-mapping>
      <filter-mapping>
        <filter-name>SessionFilter</filter-name>
        <url-pattern>*</url-pattern>
      </filter-mapping>

     

    转载于:https://www.cnblogs.com/ld-swust/p/5170006.html

    展开全文
  • 列表和数组非常类似,它实现了序列协议,允许队列里面增加和移除对象。列表用一对方括号表示,第一个元素的索引是 0。列表有许多关联的方法。创建列表在一对方括号内,用逗号隔开的一个值序列,就是列表。a_list =...

    列表在Python 中使用的频率最高,列表也是对象,并且它可以处理另外的对象。列表和数组非常类似,它实现了序列协议,允许从队列里面增加和移除对象。列表用一对方括号表示,第一个元素的索引是 0。列表有许多关联的方法。

    创建列表

    在一对方括号内,用逗号隔开的一个值序列,就是列表。

    a_list = [1,2,3,4]

    b_list = ['a','b','c','d']

    c_list = ['一','二','三','四','五','六']

    d_list = [1,2,'三','四']

    处理列表的值

    处理列表元素的语法和处理字符串字符的语法相同。索引的表示是用方括号括起来的表达式,索引开始值是0。

    例子

    a_list = [1,2,3,4]

    num1 = a_list[0]

    num2 = a_list[3]

    print(num1)

    print(num2)

    输出

    1

    4

    例子

    d_list = [1,2,'三','四']

    num = d_list[1]

    str = d_list[2]

    print(num)

    print(str)

    输出

    2

    列表的长度

    函数 len 返回列表的长度,等于列表内元素的个数。

    例子

    numbers = ['一','二','三','四','五','六']

    list_len = len(numbers)

    print(list_len)

    输出

    6

    清空列表

    列表的 clear() 方法移除全部元素。

    例子

    numbers = ['一','二','三','四','五','六']

    print(numbers)

    numbers.clear()

    print(numbers)

    输出

    [‘一’,’二’,’三’,’四’,’五’,’六’]

    []

    插入或删除元素

    函数 append() 在列表的末尾追加一个元素,列表的长度会增加一。

    例子

    numbers = ['一','二','三','四','五']

    numbers.append('六')

    print(numbers)

    输出

    [‘一’,’二’,’三’,’四’,’五’,’六’]

    在列表里面追加一个列表

    例子

    num1 =[1,2,3]

    num2 = [4,5,6]

    num1.append(num2)

    print(num1)

    输出

    [1, 2, 3, [4, 5, 6]]

    列表操作符

    使用 “+” 操作符连接列表

    例子

    num1 =[1,2,3]

    num2 = [4,5,6]

    num3 = num1 + num2

    print(num3)

    输出

    [1, 2, 3, 4, 5, 6]

    使用 * 操作符重复连接给定数量的列表

    例子

    num1 =['hi']

    num = num1 * 4

    print(num)

    输出

    [‘hi’, ‘hi’, ‘hi’, ‘hi’]

    例子

    num1 =[1,2,3,4]

    num = num1 * 2

    print(num)

    输出

    [1, 2, 3, 4, 1, 2, 3, 4]

    插入元素到列表

    例子

    num1 =[1,2,4]

    num1.insert(2,3) #在第三个位置插入一个元素

    print(num1)

    输出

    [1, 2, 3, 4]

    例子

    num1 =[1,2,3,4,6]

    num1.insert(-1,5) #在列表倒数第二个位置插入一个元素(负数表示从列表末尾倒数)

    print(num1)

    输出

    [1, 2, 3, 4, 5, 6]

    从列表删除元素

    例子

    numbers = ['一','二','三','四','五','六']

    numbers.remove('三')

    print(numbers)

    输出

    [‘一’,’二’,’四’,’五’,’六’]

    列表的统计

    列表的 count(x) 方法会返回元素 x在列表中出现的次数。

    例子

    str = ['h','e','l','l','o']

    cnt = str.count('l')

    print(cnt)

    输出

    2

    元素的分割

    列表元素可以进行分割。

    例子

    str = ['h','e','l','l','o']

    lsc = str[1:4]

    print(lsc)

    输出

    [‘e’, ‘l’, ‘l’]

    str[1:4] – 表示从第二个元素开始,到第五个元素为止,但是不包括第五个元素。中间的冒号表示需要对列表的元素进行切片分割,获得子列表。

    例子

    str = ['h','e','l','l','o']

    lsc = str[:3] # 分割出开始的三个元素

    print(lsc)

    输出

    [‘h’, ‘e’, ‘l’]

    例子

    str = ['h','e','l','l','o']

    lsc = str[3:] # 分割从第四个元素开始,第一个索引是 0

    print(lsc)

    输出

    [‘l’, ‘o’]

    列表的反转

    reverse() 方法会反转一个列表的全部元素。

    例子

    str = ['h','e','l','l','o']

    str.reverse()

    print(str)

    输出

    [‘o’, ‘l’, ‘l’, ‘e’, ‘h’]

    列表的查找

    index() 方法可以返回第一个匹配的项的索引。

    例子

    str = ['h','e','l','l','o']

    ind = str.index('l') # 'l' 的索引位置是2

    print(ind)

    输出

    2

    可以指定匹配查找的开始和结束的索引位置:

    例子

    str = ['h','e','l','l','o']

    ind = str.index('l',3) # 从第三个位置开始查找

    print(ind)

    输出

    3

    在列表里面的存在性

    用关键字 in 来检测元素在列表里面是否存在。

    例子

    str = ['h','e','l','l','o']

    print('e' in str)

    输出

    True

    列表里面不存在

    例子

    str = ['h','e','l','l','o']

    print('e' not in str)

    输出

    False

    使用动态的值创建新列表

    例子

    dList = [3 ** i for i in range(5)]

    print(dList)

    输出

    [1, 3, 9, 27, 81]

    列表排序

    列表的 sort() 方法完成列表元素的内部排序。

    例子

    str = ['h','e','l','l','o']

    str.sort()

    print(str)

    输出

    [‘e’, ‘h’, ‘l’, ‘l’, ‘o’]

    反转排序

    例子

    str = ['h','e','l','l','o']

    str.sort(reverse=True)

    print(str)

    输出

    [‘o’, ‘l’, ‘l’, ‘h’, ‘e’]

    作为栈的列表

    栈是一个对象的容器,按照后进先出(LIFO)的原则完成对象的插入和移除。 在栈中只能进行两种操作: 压入项到栈, 弹出项出栈。在列表栈的顶部增加一个项,用 append() ,并且从栈的顶部接收一个项,用无索引的 pop()。

    例子

    stack = [1,2,3,4,5]

    print("压入前 ", stack)

    stack.append(6)

    stack.append(7)

    print("压入后 ", stack)

    stack.pop()

    print("弹出后 ", stack)

    stack.pop()

    stack.pop()

    print("弹出后 ", stack)

    输出

    压入前 [1, 2, 3, 4, 5]

    压入后 [1, 2, 3, 4, 5, 6, 7]

    弹出后 [1, 2, 3, 4, 5, 6]

    弹出后 [1, 2, 3, 4]

    列表作为队列

    队列是一个对象的容器,按照先进先出(FIFO)的原则完成对象的插入和移除。队列只允许两种操作:进列和出列。进列 (append()) 意思是在队列的尾部插入一个项,出列 (pop(0))从前面移除一个项。

    例子

    queue = [1,2,3]

    print("进列前 ", queue)

    queue.append(4)

    queue.append(5)

    print("进列后 ", queue)

    queue.pop(0)

    print("出列后 ", queue)

    queue.pop(0)

    queue.pop(0)

    print("出列后 ", queue)

    输出

    进列前 [1, 2, 3]

    进列后 [1, 2, 3, 4, 5]

    出列后 [2, 3, 4, 5]

    出列后 [4, 5]

    遍历一个列表

    使用 for 循环遍历列表的每一个元素。

    例子

    str = ['h','e','l','l','o']

    for s in str:

    print(s)

    输出

    h

    e

    l

    l

    o

    从第一个位置开始,获得其他的元素。

    例子

    str = [1,2,3,4,5,6,7,8,9,10]

    print(str[::2])

    输出

    [1, 3, 5, 7, 9]

    从第二个位置开始,获得其他元素。

    例子

    str = [1,2,3,4,5,6,7,8,9,10]

    print(str[1::2])

    输出

    [2, 4, 6, 8, 10]

    反转列表项

    例子

    str = [1,2,3,4,5,6,7,8,9,10]

    print(str[::-1])

    输出

    [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]

    zip() 函数

    如果想同时循环遍历多个序列,可以使用 zip() 函数。

    例子

    numbers = [1,2,3,4,5]

    alpla = ['a','b','c','d','e']

    for num, alp in zip(numbers,alpla):

    print(num, alp)

    输出

    1 a

    2 b

    3 c

    4 d

    5 e

    从列表中删除重复的元素

    获得唯一值集合的通用方案是利用字典,python 字典是一个唯一键值对的映射集合。所以将列表去除重复值的有效方法,就是利用字典完成转换。

    例子

    numList = [1,2,3,1,4,2,5,3]

    numList = list(dict.fromkeys(numList))

    print(numList)

    输出

    [1, 2, 3, 4, 5]

    Python 列表的 extend() 方法

    列表的 extend() 方法 可以通过传递一个列表参数完成添加这个列表的全部元素到这个列表,list.extend(其他列表) 。

    例子

    list1 = ['a', 'b', 'c']

    list1.extend(['d', 'e'])

    print(list1)

    输出

    [‘a’, ‘b’, ‘c’, ‘d’, ‘e’]

    append() 和 extend() 的比较

    Python 的 append() 方法 添加一个元素到列表,extend() 方法是连接两个列表。append() 方法添加一个元素之后,它的长度增加一,extend() 方法 会遍历它的参数,并添加每一元素,它的长度会按照遍历到的元素个数增加。

    Python append()方法的例子

    list1 = ['a', 'b', 'c']

    list1.append(['d', 'e'])

    print(list1)

    输出

    [‘a’, ‘b’, ‘c’, [‘d’, ‘e’]]

    Python extends() 方法的例子

    list1 = ['a', 'b', 'c']

    list1.extend(['d', 'e'])

    print(list1)

    输出

    [‘a’, ‘b’, ‘c’, ‘d’, ‘e’]

    Python append() 和 extend()的操作符重载

    在python里面,列表定义了 + 和 += 两个操作符 。它们类似于扩展(extend)的语法。第一个列表 + 第二个列表 会在内存里面创建第三个列表,并返回这个结果,要求是第二个列表是可以遍历的。第一个列表 += 第二个列表 会改变列表值,不会创建新的列表,它也类似于扩展(extend)。

    时间复杂性

    追加(append)有固定的时间复杂度,O(1)

    扩展(extend)的时间复杂度是 O(k),其中 k 是需要添加的列表的长度

    Python 的 append() 和extend()方法

    extend() 方法的语法较为清晰,比追加的方式速度快。另外,如果仅仅是单纯增加一个元素,就使用 append() 方法。

    展开全文
  • redis中的list链表

    2020-11-02 20:23:37
    一个(Key-Value对),Key代表List名称,value是里面的键值 List的索引有两种:一种是0~len - 1,另一种是 -len ~ -1 Left、right都可插入元素(Left代表头部插入,right代表尾部插入) 如果,key不存在,创建...

    List
    是一个(一个Key-多个Value),Key代表List名称,value是里面的键值
    List的索引有两种:一种是0~len - 1,另一种是 -len ~ -1
    Left、right都可插入元素(Left代表从头部插入,right代表从尾部插入)
    如果,key不存在,创建链表
    如果,key存在,链表添加内容
    如果,链表值全部移除,key也就消失了

    效率分析
    链表的头尾元素操作,效率都非常高
    链表中间元素操作,效率比较低

    头尾添加值

    LPUSH key value [value …]
    将一个或多个值 value 插入到列表 key 的表头
    RPUSH key value [value …]
    将一个或多个值 value 插入到列表 key 的表尾(最右边)。
    如果 key 不存在,一个空列表会被创建并执行 LPUSH(RPUSH) 操作。
    当 key 存在但不是列表类型时,返回一个错误。

    返回值

    执行操作后,表的长度。

    local_redis:0>lpush mylist 5 6 7
    "3"
    local_redis:0>rpush mylist 5 6
    "5"
    local_redis:0>lpush mylist 1
    "6"
    local_redis:0>lrange mylist 0 -1
     1)  "1"
     2)  "7"
     3)  "6"
     4)  "5"
     5)  "5"
     6)  "6"
    

    头尾添加值(2)

    LPUSHX key value

    将值 value 插入到列表 key 的表头,当且仅当 key 存在并且是一个列表。
    和 LPUSH 命令相反,当 key 不存在时, LPUSHX 命令什么也不做。
    RPUSHX key value

    将值 value 插入到列表 key 的表尾,当且仅当 key 存在并且是一个列表。
    和 RPUSH 命令相反,当 key 不存在时, RPUSHX 命令什么也不做。

    返回值:

    命令执行之后,表的长度。

    local_redis:0>lpushx a 5 6
    "ERR wrong number of arguments for 'lpushx' command"
    local_redis:0>lpush a 5 6
    "2"
    local_redis:0>rpushx a 0
    "3"
    local_redis:0>lrange a 0 -1
     1)  "6"
     2)  "5"
     3)  "0"
    

    查看索引范围内的值

    LRANGE key start stop

    超出范围的下标

    超出范围的下标值不会引起错误。
    如果 start 下标比列表的最大下标 end ( LLEN list 减去 1 )还要大,那么 LRANGE 返回一个空列表。
    如果 stop 下标比 end 下标还要大,Redis将 stop 的值设置为 end 。

    返回值:

    一个列表,包含指定区间内的元素。

    local_redis:0>lrange mylist 0 -1
     1)  "1"
     2)  "7"
     3)  "6"
     4)  "5"
     5)  "5"
     6)  "6"
    local_redis:0>lrange mylist 0 1
     1)  "1"
     2)  "7"
    local_redis:0>lrange mylist -6 -1
     1)  "1"
     2)  "7"
     3)  "6"
     4)  "5"
     5)  "5"
     6)  "6"
    

    查看指定索引的值

    LINDEX key index
    返回列表 key 中,下标为 index 的元素。
    如果 key 不是列表类型,返回一个错误。

    返回值:

    列表中下标为 index 的元素。
    如果 index 参数的值不在列表的区间范围内(out of range),返回 nil 。

    local_redis:0>lrange mylist 0 -1
     1)  "1"
     2)  "7"
     3)  "6"
     4)  "5"
     5)  "5"
     6)  "6"
    local_redis:0>lindex mylist -1
    "6"
    local_redis:0>lindex mylist 1
    "7"
    local_redis:0>lindex mylist 0
    "1"
    

    输出头尾的值并进行删除

    LPOP key
    移除并返回列表 key 的头元素。
    RPOP key
    移除并返回列表 key 的尾元素。

    返回值:

    列表的头或者尾元素。
    当 key 不存在时,返回 nil 。

    local_redis:0>lrange mylist 0 -1
     1)  "1"
     2)  "7"
     3)  "6"
     4)  "5"
     5)  "5"
     6)  "6"
    local_redis:0>lpop mylist
    "1"
    local_redis:0>rpop mylist
    "6"
    local_redis:0>lrange mylist 0 -1
     1)  "7"
     2)  "6"
     3)  "5"
     4)  "5"
    

    获取长度

    LLEN key
    返回列表 key 的长度。
    如果 key 不存在,则 key 被解释为一个空列表,返回 0 .
    如果 key 不是列表类型,返回一个错误。

    返回值:

    列表 key 的长度。

    local_redis:0>llen mylist
    "4"
    local_redis:0>lrange mylist 0 -1
     1)  "7"
     2)  "6"
     3)  "5"
     4)  "5"
    

    删除值

    LREM key count value

    根据参数 count 的值,移除列表中与参数 value 相等的元素。

    count 的值可以是以下几种:

    count > 0 : 从表头开始向表尾搜索,移除与 value 相等的元素,数量为 count 。
    count < 0 : 从表尾开始向表头搜索,移除与 value 相等的元素,数量为 count 的绝对值。
    count = 0 : 移除表中所有与 value 相等的值。

    返回值:

    被移除元素的数量。
    因为不存在的 key 被视作空表(empty list),所以当 key 不存在时, LREM 命令总是返回 0 。

    local_redis:0>lrange mylist 0 -1
     1)  "5"
     2)  "5"
     3)  "5"
     4)  "5"
     5)  "7"
     6)  "6"
     7)  "5"
     8)  "5"
    local_redis:0>lrem mylist -2 5
    "2"
    local_redis:0>lrange mylist 0 -1
     1)  "5"
     2)  "5"
     3)  "5"
     4)  "5"
     5)  "7"
     6)  "6"
    local_redis:0>lrem mylist 1 5
    "1"
    local_redis:0>lrange mylist 0 -1
     1)  "5"
     2)  "5"
     3)  "5"
     4)  "7"
     5)  "6"
    local_redis:0>rpush mylist 5 5
    "7"
    local_redis:0>lrange mylist 0 -1
     1)  "5"
     2)  "5"
     3)  "5"
     4)  "7"
     5)  "6"
     6)  "5"
     7)  "5"
    local_redis:0>lrem mylist 0 5
    "5"
    local_redis:0>lrange mylist 0 -1
     1)  "7"
     2)  "6"
    

    保留指定区间的值

    LTRIM key start stop

    对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。
    举个例子,执行命令 LTRIM list 0 2 ,表示只保留列表 list 的前三个元素,其余元素全部删除。
    当 key 不是列表类型时,返回一个错误。

    超出范围的下标

    超出范围的下标值不会引起错误。
    如果 start 下标比列表的最大下标 end ( LLEN list 减去 1 )还要大,或者 start > stop , LTRIM 返回一个空列表(因为 LTRIM 已经将整个列表清空)。
    如果 stop 下标比 end 下标还要大,Redis将 stop 的值设置为 end 。

    返回值:

    命令执行成功时,返回 ok 。

    local_redis:0>lrange mylist 0 -1
     1)  "7"
     2)  "6"
     3)  "1"
     4)  "2"
     5)  "3"
     6)  "4"
     7)  "5"
    local_redis:0>ltrim mylist 5 6
    "OK"
    local_redis:0>lrange mylist 0 -1
     1)  "4"
     2)  "5"
    

    设置指定索引的值

    LSET key index value
    将列表 key 下标为 index 的元素的值设置为 value 。
    当 index 参数超出范围,或对一个空列表( key 不存在)进行 LSET 时,返回一个错误。

    返回值:

    操作成功返回 ok ,否则返回错误信息。

    local_redis:0>lrange mylist 0 -1
     1)  "4"
     2)  "5"
     3)  "1"
     4)  "2"
     5)  "3"
    local_redis:0>lset mylist 3 99
    "OK"
    local_redis:0>lrange mylist 0 -1
     1)  "4"
     2)  "5"
     3)  "1"
     4)  "99"
     5)  "3"
     local_redis:0>lrange mylist 0 -1
     1)  "4"
     2)  "5"
     3)  "1"
     4)  "99"
     5)  "3"
    local_redis:0>lset mylist -2 -55
    "OK"
    local_redis:0>lrange mylist 0 -1
     1)  "4"
     2)  "5"
     3)  "1"
     4)  "-55"
     5)  "3"
     local_redis:0>lset aa 0 1
    "ERR no such key"
    local_redis:0>lset mylist 100 1
    "ERR index out of range"
    

    插入元素

    LINSERT key BEFORE|AFTER pivot value

    将值 value 插入到列表 key 当中,位于值 pivot 之前或之后。
    当 pivot 不存在于列表 key 时,不执行任何操作。
    当 key 不存在时, key 被视为空列表,不执行任何操作。
    如果 key 不是列表类型,返回一个错误。

    返回值:

    如果命令执行成功,返回插入操作完成之后,列表的长度。
    如果没有找到 pivot ,返回 -1 。
    如果 key 不存在或为空列表,返回 0 。

    local_redis:0>lrange mylist 0 -1
     1)  "4"
     2)  "5"
     3)  "1"
     4)  "-55"
     5)  "3"
     6)  "4"
     7)  "3"
    local_redis:0>linsert mylist before 3 100
    "8"
    local_redis:0>lrange mylist 0 -1
     1)  "4"
     2)  "5"
     3)  "1"
     4)  "-55"
     5)  "100"
     6)  "3"
     7)  "4"
     8)  "3"
    local_redis:0>linsert mylist after 3 99
    "9"
    local_redis:0>lrange mylist 0 -1
     1)  "4"
     2)  "5"
     3)  "1"
     4)  "-55"
     5)  "100"
     6)  "3"
     7)  "99"
     8)  "4"
     9)  "3"
     local_redis:0>linsert mylist before 11 12
    "-1"
    

    其他命令

    BLPOP
    BRPOP
    BRPOPLPUSH
    RPOPLPUSH

    展开全文
  • 从一个整型链表里面移除值等于val的节点。 解题思路: 需要一个指针指向前驱节点,遍历链表,针对符合条件的节点,分两种情况处理 1)如果前驱节点不为空,前驱节点指向当前节点的下一个节点 2)如果前驱节点为...

    题目描述:

    从一个整型链表里面移除值等于val的节点。

    解题思路:

    需要一个指针指向前驱节点,遍历链表,针对符合条件的节点,分两种情况处理

    1)如果前驱节点不为空,前驱节点指向当前节点的下一个节点

    2)如果前驱节点为空,头指针指向当前节点下一个节点

    如果节点的值不等于val,前驱节点指针指向当前节点。

    代码如下:

    /**
     * Definition for singly-linked list.
     * struct ListNode {
     *     int val;
     *     ListNode *next;
     *     ListNode(int x) : val(x), next(NULL) {}
     * };
     */
    class Solution {
    public:
        ListNode* removeElements(ListNode* head, int val) {
            ListNode* pre = NULL;
            ListNode* cur = head;
            while(cur != NULL) {
                if (cur->val == val) {
                    if (pre != NULL) {
                        pre->next = cur->next;
                    }else {
                        head = cur->next;
                    }
                }else {
                    pre = cur;
                }
                cur = cur->next;
            }
    
            return head;
        }
    };

     

    转载于:https://www.cnblogs.com/AndrewGhost/p/9351088.html

    展开全文
  • 利⽤ArrayList或者是List<>做⼀个⼩型的学⽣管理系统 添加学⽣ 移除学⽣【根据学号移除】 查询学⽣【根据姓名查询学⽣、根据性别...下面是代码(偷懒全写在一个文件): using System; using System.Col...
  • 今天用iBATIS写了个下拉框加载数据,第一...找了2个小时,才发现我的方法少了一个清理内存的方法。 public List getCityList() {  example.clear();//List.clear方法——列表中移除所有元素  List dtos=new Arr
  • 进程挂在这个函数里了,log可以看出for循环里打印了步骤1211之后就挂了,也就是说循环一次满足了if条件将list里的第一个元素erase之后,循环到第3次程序挂了。我想不明白,即使把第一个元素移除了,后面的依然满足...
  • python中pop()函数用于移除列表中的一个元素(默认为最后一个元素)。该方法返回列表中移除的元素对象。函数语法为:【list.pop([index=-1])】。pop() 函数用于移除列表中的一个元素(默认最后一个元素),并且返回该...
  • 给出一个静态链表信息,去掉所有数据值(绝对值)重复的结点。 最后输出挑选出的链表和废弃的被移除的结点组成的链表。 思路: 有多个方法,可以用数组。我这里用的stl的map。 把读入的结点存入map中。 然后...
  • 详细内容pop() 函数用于移除列表中的一个元素(默认最后一个元素),并且返回该元素的值。pop()方法语法:list.pop(obj=list[-1])参数obj -- 可选参数,要移除列表元素的对象。返回值该方法返回列表中移除的元素对象...
  • pop() 函数用于移除列表中的一个元素(默认最后一个元素),并且返回该元素的值。pop()方法语法:list.pop(obj=list[-1])参数obj -- 可选参数,要移除列表元素的对象。返回值该方法返回列表中移除的元素对象。相关...
  • 今天遇到的报错其实是: 'list' object is not callable ...前者是删除变量(全局字典里面移除),后者是删除该变量指向的内存。 那为什么del list以后list会恢复到原本的内置函数的地址呢? 我的理解是:(如...
  • Redis实战(

    2020-03-25 19:54:32
    每个结点都包含一个字符串的链表 链表两端推入或弹出元素,依据偏移量修剪链表,读取单个或者多个元素,根据值查找或者移除元素 set 无序不重复的集合 添加,获取,移除单个元素,检查元素是否存在,计算交并补,...
  • 按钮,将把选中的商品数据库中移除 二,思路分析 整理页面, 添加"复选框"和"删除选中"的按钮 给最上面的复选框设置点击事件,创建函数响应这事件 在函数里面:完成全选和全不选...
  • 3.移除后再剩下的List元素里面取另一个元素,如此类推 public static void main(String[] args) { String[] strArray = {"a","b","c","d","e"...
  • 数据类型可以存储的值操作STRING字符串、整数或者浮点数对整个字符串或者字符串的其中一部分执行操作对整数和浮点数执行自增或者自减操作LIST列表两端压入或者弹出元素读取单个或者多个元素进行修剪,只保留一个...
  • 语法:list.pop(obj=list[-1]) //默认为 index=-1,删除最后一个列表值。//obj -- 可选参数,要移除列表元素的对象。该方法返回列表中移除的元素对象。实例:sentence=['All', 'good', 'things', 'come', 'to' ,'...
  • pop() 函数用于移除列表中的一个元素(默认最后一个元素),并且返回该元素的值。pop()方法语法:list.pop(obj=list[-1])参数obj -- 可选参数,要移除列表元素的对象。返回值该方法返回列表中移除的元素对象。相关...
  • zuul 里面的 prefix 和 strip-prefix 怎么使用

    万次阅读 热门讨论 2019-11-08 17:48:15
    strip-prefix :代理前缀默认会请求路径中移除,通过该设置关闭移除功能, 当 stripPrefix=true 的时 (会移除) (http://127.0.0.1:8181/api/user/list -> http://192.168.1.100:8080/us...
  • 我们可以在终端通过 <code>open -e</code> 命令使用 Mac 默认的文本编辑器打开一个文件: <pre><code>bash $ open -e /usr/local/etc/apache2/2.4/httpd.conf </code></pre> <p><img alt="macOS-Sierra-...
  • python3 的reduce()函数

    2017-04-05 12:49:35
    首先,在Python 3里,reduce()函数已经被全局名字空间里移除了,它现在被放置在fucntools模块里 ...reduce()函数接收的参数和 map()类似,一个函数 f,一个list,但行为和 map()不同,reduce()传入的函数
  •  可以用arraylist 来 帮助我们存放 10个 数字 ,从list 的0位开始遍历 每遍历一次 remove 一个元素 当10个元素 移除 6个 所有可能的 组合都找出来了。 当然这里面会用到递归调用。算法比较粗糙,有更简练的可以...
  • 题目:如何得到一个数据流中的中位数?如果数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。解析:...
  • React响应网格 使用React构建响应式... 通过“最后一个”道具移除最后一个排水沟 通过“第一个”道具移除一个天沟 支持嵌套范围 使用“ at”道具设置跨度位置 跨度外部装订线(除了内部装订线) “中断”道具-
  • 对象池

    2016-09-30 13:56:56
    这周VR做飞机的项目,子弹太多,用到对象池,用的是一个插件,但是发现一个问题,子弹数特别多的情况下,池放了400个子弹,特效也特别多,结果发现一个问题,池中取对象和对象回池用时太长,多的时候能达到2ms。...
  • <pre><code>$ git reset HEAD^ // 回退到上一个commit, 默认--mixed </code></pre> <p>git reset 有3个选项, <code>--soft</code> 不会影响到工作目录还有暂存区的东西 <code>--hard</code> 工作目录࿰...
  • 面试中的问题

    2019-04-01 11:09:44
    然后想起面试的时候的这问题,那时候记得处理是用一新的List进行存储,然后整体List移除所有符合规则的元素,现在做总结。用这Iterator主要可以避免下标越界或者遍历是漏掉符合规则...
  • 算法刻意练习3

    2019-10-22 22:44:42
    列表 list是一种有序的集合,可以随时添加和删除其中的元素。...extend()是扩展,把一个东西的所有元素添加在列表后 insert(index, obj)在编号 index 位置前插入 obj 删除元素 remove(obj) 移除列表中某个值...
  • 集合类练习

    2019-10-02 02:03:06
    将1~100之间的所有正整数存放在一个List集合,并将集合中索引位置是10的对象集合中移除 package org.hanqi.array; import java.util.*; public class Test { public static void main(String[] ...

空空如也

空空如也

1 2 3 4
收藏数 69
精华内容 27
关键字:

从一个list里移除一个list